У меня возникли проблемы с пометкой («) в python [ос.система]

#python #os.system

Вопрос:

Это сценарий

 from tkinter import *
import os

window = Tk()
window.title("Download from Web")
window.geometry("300x120 200 100")

photo = PhotoImage(file = "icon/icon.png")
window.iconphoto(False, photo)


urltxt = Label(window, text = "Url").place(x = 10, y = 10)  
url = Entry(window, width=30)
url.insert(0,"")
url.grid(row=1, column=0, padx=80, pady=10)


filetxt = Label(window, text = "Save File name").place(x = 10, y = 10)  
filename = Entry(window, width=30)
filename.insert(0,".exe,.zip,.rar")
filename.grid(row=2, column=0, padx=80, pady=10)



def Message():
    os.system(f"powershell -c "Invoke-WebRequest -Uri '{url.get()}' -OutFile '{filename.get()}'"")

btnSendMessage = Button(window, text="Search", width=20, command=Message)
btnSendMessage.grid(row=4, column=0, padx=10, pady=10)

window.mainloop()
 

У меня проблема с этой частью текста

 def Message():
    os.system(f"powershell -c "Invoke-WebRequest -Uri '{url.get()}' -OutFile '{filename.get()}'"")
 

У меня проблема с этими двумя частями, в частности, когда я добавляю ' в код, я получаю ошибку

 '{url.get()}' and '{filename.get()}'
 

Комментарии:

1. Одинарные и двойные кавычки можно экранировать с ' помощью и " , соответственно

2. Ты имеешь в виду вот так '{url.get()}'

3. В общем, использовать os.system() -плохая идея. subprocess Модуль может позволить вам передать массив argv, поэтому вам не нужно выяснять, как построить строку в соответствующих кавычках.

4. Также: Для какой платформы это предназначено? (Powershell доступен на платформах UNIX, так что это ничего не говорит нам окончательно; но какой тип цитирования необходимо использовать для os.system различий между UNIX и Windows)

Ответ №1:

Кавычки могут быть экранированы обратными косыми чертами, как показано на рисунке:

 os.system(f"powershell -c "Invoke-WebRequest -Uri '{url.get()}' -OutFile '{filename.get()}'"")