2017-02-11 3 views
1

2つのsimultaniuosly whileループを作成するスクリプトを作成したいと思います。これを達成するために、私は別のスクリプトを開こうとしています(1つのコードをすべて持つ代わりに複数のスクリプトを同時に実行させる)。 メインスクリプト:Pythonサブプロセスが起動していないのにエラーが発生していない

#!/bin/env python 
import sys 
import subprocess 
print sys.path 
process = subprocess.Popen('/home/pi/test2.py', shell=True, stdout=subprocess.PIPE) 

2番目のスクリプト:

#!/bin/env python 
import sys 
i=1 
print sys.path 
while i<50: 
    print i 
    i=i+1 

メインスクリプトはエラーなしで終了したが第二も起動しないように見えます。どうして?

+0

同時に実行している2つのwhileループが必要なのはなぜですか?実際の_goal_が何であるか説明してください。ありがとう! –

+0

センサからの測定データ(=入力信号の持続時間)を取得する必要があります - これは、入力信号が停止するまで約30ms待っていることを意味します。それと同時に、私はモータを制御するために20msごとに1msの信号を出力する必要があります。 - あなたはもっと良い解決策を知っていますか? – xHascox

答えて

1

test2.pyの出力を表示する場合は、stdout=subprocess.PIPEを指定しないでください。それは標準を収集し、processオブジェクト経由でアクセスできるようにします。

また、あなたが必要と確信している場合を除き、shell=Trueはお勧めできません。

その後sigmavirus24s答えに追加するこの

subprocess.Popen(['/home/pi/test2.py']) 
+0

process = subprocess.Popen( '/ home/pi/test2.py')これは?私はエラーを受け取りません。そのようなファイルやディレクトリはありません。 – xHascox

+0

@xHascoxファイルが存在し、実行可能ですか?/ –

+0

私はLinuxやPythonにそれほど使い慣れていません。 – xHascox

0

のようになります。 shell=Trueを設定しない場合は、引数をこのようなリストとして渡して['/home/pi/test2.py']のように渡し、最初の引数として渡す必要があります。多くの引数については、shlexモジュールsplit関数を使用して、stringを引数のリストに分割します。

編集:スクリプトを動作させるには、引数として['python', '/home/pi/test2.py']を渡す必要があります。これにより、pythonにスクリプトが実行されます。

+0

subprocess.Popen(['/ home/pi/test2.py'])の結果、エラー2にそのようなファイルやディレクトリがありません – xHascox

+0

'['/home/pi/test2.py']の代わりに' ['python' 、 '/home/pi/test2.py'] '。それは私のために動作します – s0hvaperuna

+0

私が入力したパスが完全なナンセンスですが、test2.pyが始まらない場合でも、私はエラーを取得しません。 – xHascox

関連する問題