2016-04-01 10 views
0

私は現在、サブプロセスの使い方を学んでいます。これは(そして他の理由で) 私はサブプロセスを扱う方法を学ぶために本を買っています。それは良い本 だと私はそれを理解するトラブルを抱えていないよ。私の本では、 サブプロセスとしてシェルコマンドを実行する方法を説明し始めます。funcionコールバックをPythonのサブプロセスとして実行するにはどうすればいいですか?

私は年齢のために持っていたプログラミングの問題を抱えていたし、サブプロセスで、私は が、私はサブプロセスとして関数コールバックを実行する必要がそれを解決することである可能性があります。

私は何かをエコーするには、このコードを持っているが、それはシェルコマンドだ:私はちょうどこのコールバックを実行するために試してみた

def callb() 
import time as t 
print('2') 
t.sleep(2) 
    print('1') 
t.sleep(2) 
    print('0') 

import subprocess 

proc = subprocess.Popen(['echo', 'Hello, this is child process speaking'], 
      stdout=subprocess.PIPE, shell=True) 
out, err = proc.communicate() 
print(out.decode('utf-8')) 

が、私はこのコールバックは、サブプロセスとして実行させたいです

proc = subprocess.Popen(callb()) 

しかし、これは私に次のエラーを与えます。

Traceback (most recent call last): 
    File "/root/testfile.py", line 6, in <module> 
    proc = subprocess.Popen(callb()) 
    File "/usr/lib/python3.3/subprocess.py", line 818, in __init__ 
    restore_signals, start_new_session) 
    File "/usr/lib/python3.3/subprocess.py", line 1321, in _execute_child 
    args = list(args) 
TypeError: 'NoneType' object is not iterable 

奇妙なことは、それががコールバックを実行しないこと、ですが、それは、このエラーが発生します! どうしたのですか?私は何かを忘れましたか?

+1

この関数が呼び出され、デフォルトでNoneを返すので、基本的に 'subprocess.Popen(None)'を呼び出しています –

+0

どうしたらエラーを回避できますか? –

+0

それは本当にあなたがやりたいことに依存しています、あなたが望むことをやり遂げるためのより簡単な方法があります。コールバックロジックの背後にあるアイデアは何ですか? –

答えて

1

subprocessモジュールは、Pythonコールバックの実行には適していません。代わりにmultiprocessing moduleを見たいと思っています。 ProcessPoolの最初のいくつかの例は、あなたが望むことをするようです。

関連する問題