В 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

Другие вопросы по тегам