Python - Errno 2: нет такого файла или каталога

Итак, я пытаюсь использовать subprocess.Popen(), чтобы открыть скрипт Python в CMD «сложным» способом. Хотя я не могу открыть его из-за пробела в имени моего ПК. Я пытался использовать двойные кавычки и одинарные кавычки, но это все еще не работает.

Вот строка кода, которую я пытаюсь выполнить.

subprocess.Popen("cmd.exe /C python '\Users\Terra Byte\Desktop\jdos3\JDOS3\SYS64\bootthingy.py'")

Как видите, я использую одинарные кавычки для обозначения пути к каталогу, но это ошибка, которую я получаю при выполнении.

C:\Users\Terra Byte\Desktop\jdos3\JDOS3>python: can't open file ''\Users\Terra': [Errno 2] No such file or directory

Кажется, он полностью игнорирует мои одинарные кавычки.


person sp0rka    schedule 15.10.2019    source источник
comment
передавать аргументы как list и использовать необработанные строки.   -  person Jean-François Fabre    schedule 15.10.2019


Ответы (1)


Никогда не пытайтесь создать имя команды в виде строки.

В этом конкретном случае имейте в виду, что одинарные кавычки не имеют защитного эффекта для окон (в отличие от Linux/Unix), что объясняет неэффективность используемых вами кавычек. Использование двойных кавычек сработало бы, но это не лучший способ.

Никогда не используйте строку, если вы можете передать список аргументов. Это будет работать:

subprocess.Popen(["python",r'\Users\Terra Byte\Desktop\jdos3\JDOS3\SYS64\bootthingy.py'])
  • используйте список строк, без кавычек, и пусть subprocess сделает всю работу
  • удалите префикс cmd /c, так как префикса python достаточно (или удалите python, чтобы оставить ["cmd","/c", и пусть ассоциации файлов сделают свою работу)
  • используйте префикс необработанной строки, чтобы избежать интерпретации обратной косой черты
person Jean-François Fabre    schedule 15.10.2019