В Python 3.5 при использовании списка аргументов в качестве входных данных для subprocess.Popen() я не могу получить правильный len(sys.argv)
В эксперименте_script.py я использую список в качестве входных данных для subprocess.Popen()
,
cmd = [r'.\modified_easy.py', training_libsvm_files[training_index], testing_libsvm_files[training_index]]
p = subprocess.Popen(cmd,
shell = True, # The cmd won't work without this setting in Python 3.3. However, in Python 3.5, this setting is not necessary.
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
В.\Ified_easy.py проверяется количество аргументов:
if len(sys.argv) <= 1:
print('Usage: {0} training_file [testing_file]'.format(sys.argv[0]))
raise SystemExit
experiment_script.py
работает нормально в Python3.3. Однако после того, как я перешел на Python 3.5. Чек len(sys.argv)
не удается, и SystemExit
Поднялся. Я распечатал len(sys.argv)
и обнаружил, что теперь становится 1. Итак, как это происходит и как исправить len(sys.argv)
?
Моя ОС Windows 64 бит.
Результат len(sys.argv)
по-прежнему 1, даже если я использую cmd = ' '.join(cmd)
изменить последовательность на строку, а затем ввести ее в subprocess.Popen()
,
1 ответ
Спасибо @eryksun и @JF Себастьян. Я сделал несколько испытаний и нашел, как len(sys.argv)
не мог работать, как ожидалось.
Так же, как сказал @eryksun,
Выберите "Python" из списка (
py
значок запуска имеет ракету) и "всегда" использовать это приложение. Не "ищите другое приложение", потому что выбор исполняемого файла напрямую создает новый ProgId, который не принимает аргументы командной строки.
При запуске скрипта Python в другом скрипте с помощью subprocess
, если вы не укажете python
ключевое слово или sys.executable
ОС откроет .py
файл в соответствии с некоторыми файловыми ассоциациями. Если в ОС по умолчанию откройте.py файл с помощью панели запуска python py.exe
, тогда ладно. Если ОС откроет.py файл с python.exe
затем len(sys.argv)
не удастся.
Ранее я установил Anaconda на компьютер, а py.exe не было. Поэтому, когда меня спросили в диалоге "Открыть с помощью", я выбрал python.exe. Поэтому len(sys.argv) не удалось.
Чтобы решить эту проблему, я могу добавить python
ключевое слово или заставьте ОС открывать.py файлы, используя py.exe