2017-04-25 22 views
-1

私はとても混乱しています。例えばother_programPythonサブプロセスのコマンドラインエラー

だから私は、だから私はこのようにそれを実行する可能性がある、別のプログラムを使用して私のプログラムprogram10.pyを使用しようとしている:

python3 program10.py other_program 

other_programは、ここに1つの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を完全に間違って使用していることに疑いはありません。私はそれを理解していないので、他の質問やPythonのドキュメントは私を助けませんでした。誰かが私のプログラムとどう関係しているか教えていただけたら、それは大いに意味します。

+1

などの別の関数を使用する必要があります。ループを初めて実行するときに、 'subprocess.call(2 ** 10)'を実行しようとします。 。 2回目は 'subprocess.call(2 ** 11)'となります。 Pythonは、実行するプログラムの名前*があると考えています。あなたのプログラムに渡されるコマンドラインパラメータのための 'sys.argv [1]'おそらく... – jasonharper

答えて

1

subprocess.call()で実行しようとしているプログラムの名前を指定する必要があります。エラーは、intは反復可能ではないと言います。反復可能文字は、文字列、リスト、またはタプルのようなオブジェクトです。それらは複数のアイテムを「含む」オブジェクトであり、それらのアイテムを1つずつ返すことができます。 subprocess.call()には通常、コマンドと実行する引数を含むリストが必要です。たとえば、次のように

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

しかし、これは唯一のプログラムのリターンコードを返します。プログラムが作成する出力が必要な場合は、subprocess.check_output()

+0

ありがとう!プログラム内でその実行可能ファイルを実行するのにかかる時間を見つけようとしています。だから私は前と後の時間を使うのですが、どのようなコードを使っていても、整数値がどれほど大きくても、同じ時間がかかります。これを行うことは想定されていません。データが大きいほど時間がかかることになっています。私は間違っている何か他にありますか? 'subprocess.call(sys.argv [1])' – Coder117

+0

プログラムに 'n'値を渡していない可能性があります。これを試してください: 'subprocess.call([sys.argv [1]、n])' –

+0

hmmmこれは効果がありませんでした。 – Coder117

1

行 "TypeError: 'int'オブジェクトは反復可能ではありません"は、関数が整数ではなく反復可能であることを示します。文字列または文字列のリストを渡してみてください。

関連する問題