在experiment_script.py中,我使用一個列表作爲subprocess.Popen()
的輸入。 。在Python 3.5中,當使用參數列表作爲subprocess.Popen()的輸入時,我無法得到正確的len(sys.argv)
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)
在\ modified_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位。
即使我使用cmd = ' '.join(cmd)
將序列更改爲字符串,然後將其輸入到subprocess.Popen()
,len(sys.argv)
的結果仍爲1。
我困惑使操作系統開放源.py文件。我在2臺計算機上安裝了2個Python 3.3.2。 experiment_script.py在一臺計算機上工作,但在另一臺計算機上失敗。 –
嘗試在'cmd'的開頭添加''python'',例如'cmd = ['python','。\ modified_easy.py',...]'。 – acw1668
@ acw1668我加了''python'',最後'len(sys.argv)'變成了3.非常感謝。但是,原因是什麼?由於當我調用沒有'python'關鍵字的python腳本時,有很多地方。還有其他更簡單的解決方案嗎? –