#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()}'"")