2017-04-25 88 views
-1

我很困惑。所以我想用我的程序program10.py它使用其他程序,例如other_programPython子進程命令行錯誤

所以我可能會像這樣運行:

python3 program10.py other_program 

other_program接受一個int參數 這裏是我的program10.py代碼:

import time 
import subprocess 
n = 2**10 
myList = [] 
while n <= 2**15: 
    before = time.process_time() 
    subprocess.call(n) 
    after = time.process_time() 
    print(n, after-before) 
    myList.append(after-before) 
    n *= 2 

print(myList) 

當然,我得到這個大錯誤:

Traceback (most recent call last): 
    File "program10.py", line 7, in <module> 
    subprocess.call(n) 
    File "/usr/lib/python3.5/subprocess.py", line 557, in call 
    with Popen(*popenargs, **kwargs) as p: 
    File "/usr/lib/python3.5/subprocess.py", line 947, in __init__ 
    restore_signals, start_new_session) 
    File "/usr/lib/python3.5/subprocess.py", line 1440, in _execute_child 
    args = list(args) 
TypeError: 'int' object is not iterable 

我毫不懷疑我使用subprocess.call是完全錯誤的,因爲我不明白這一點,也沒有其他SO問題或Python文檔幫助我解決問題。如果任何人都可以告訴我它與我的程序有什麼關係,那意味着很多。

+1

第一次通過循環,嘗試執行'subprocess.call(2 ** 10)' 。第二次是'subprocess.call(2 ** 11)'。 Python期望的是要執行的程序的*名稱*也許是'sys.argv [1]'傳遞給你的程序的命令行參數... – jasonharper

回答

1

您應該給出您試圖在subprocess.call()中運行的程序的名稱。該錯誤表示int不可迭代。 Iterables是字符串,列表或元組等對象。它們是「包含」多個項目的對象,並且可以一次返回一個項目。 subprocess.call()通常需要包含命令和您想要運行的任何參數的列表。例如:

subprocess.call(['other_program', str(n)])

但這隻會返回程序的返回碼。如果您需要程序創建的任何輸出,您將需要使用不同的函數,如subprocess.check_output()

+0

謝謝!我試圖找到在我的程序中運行該可執行文件所需的時間。這就是爲什麼我使用前後時間的原因,但似乎無論使用什麼代碼,無論我的整數值有多大,都需要相同的時間。它不應該這樣做。數據越大,應該花費更多的時間。還有什麼我做錯了嗎?我改變了我的subprocess語句:'subprocess.call(sys.argv [1])' – Coder117

+0

你可能不會傳遞'n'值給程序。試試這個: 'subprocess.call([sys.argv [1],n])' –

+0

hmmm沒有任何效果。 – Coder117

1

行「TypeError:'int'對象不可迭代」告訴你該函數需要一個可迭代的,而不是一個整數。嘗試傳遞一個字符串或一串字符串。