#python #powershell #os.system
Вопрос:
Я хотел бы включить команду для создания архива 7zip в скрипте Python. Поскольку я работаю в Windows, мне нужно передать команду в консоль powershell. Я планирую сделать это с os.system
помощью (я знаю , что это не лучший способ сделать это и что я должен использовать subprocess
, но мне действительно просто нужно быстрое решение, и для меня было бы недостаточно времени, чтобы научиться использовать новый модуль в этом контексте). Следующая команда работает, если она выполняется из консоли powershell
amp;'C:\Program Files\7-Zip\7z' a -mx=0 X:/myarch.zip X:/myarch
Поэтому я воссоздаю ту же строку в python следующим образом:
cmdl = r"amp;'C:\Program Files\7-Zip\7z' a -mx=0 X:/myarch.zip X:/myarch"
Строка интерпретируется следующим образом:
"amp;'C:\\Program Files\\7-Zip\\7z' a -mx=0 X:/myarch.zip X:/myarch"
Теперь, если я скопирую и вставлю приведенную выше строку в консоль powershell, она будет работать без проблем. Однако, если я запущу его в python с помощью os.system(cmdl)
, я получу следующую ошибку
"The filename, directory name, or volume label syntax is incorrect"
Почему это так и как я могу решить эту проблему ?
Ответ №1:
os.system
предназначен для выполнения команд cmd, команды cmd можно запускать в powershell, возможно, в конце концов powershell немного продвинут, но я уверен, что вы не можете запустить команду cmd в powershell, отныне ваш код не работает.
Однако творческим решением для выполнения команды powershell из python(без использования python) было бы записать вашу команду в файл .ps(сценарий powershell), а затем запустить ее с помощью os.startfile()
(используйте этот код: os.startfile("script.ps")
)
Комментарии:
1. Я переписал команду для работы с cmd, а не с powershell, и теперь она работает нормально.
2. @fednem я отредактировал свой пост, если вы все еще хотите выполнить команду powershell, то можете использовать то, что я сказал
3. нет необходимости сохранять в файл ps1. Вы можете позвонить
powershell
непосредственно из cmd