2012-05-12 11 views
1

私はPythonを学んでいて、どうやってやるのか分からないという問題がありました。簡単にするために、MainとCalledScriptという2つのスクリプトがあるとしましょう。私はMainが実行可能ファイルを開き、そのPIDを取得し、それを変数に代入し、CalledScript.pyをサブプロセスとして開き、その変数を引数として渡すようにします。ほとんどの場合、インポートを使用する方が良い選択肢になることは知っていますが、私の場合、プロジェクトの他の部分のためにサブプロセスとして実行する必要があります。とにかく、私はこれを行うとエラーが発生し続ける。私はpidを送信しようとするときにのみ発生します。下の変数 "thePid"に "555"のような乱数だけを割り当てるとうまくいくはずです。 CalledScriptはそれを受け取り、それを画面に出力し、すべて正常です。しかし、cproc.pidを割り当てて送信しようとすると、うまく行きません。変数をWindows 7環境の1つのPythonスクリプトから別のPythonスクリプトに引き渡す

さらに遅延することなく、ここでは簡単なサンプルコードは次のとおりです。

Main.py

from subprocess import Popen, PIPE 
import sys 
import subprocess 
import os 

cproc = Popen("C:\Test\Test.exe", stdin=PIPE, stdout=PIPE) 

thePid = cproc.pid 

theproc = subprocess.Popen(['C:\\CalledScript.py', thePid], shell=True) 

CalledScript.py

import sys 

print "thePid is: %r" % sys.argv[1] 

私は取得していますエラー:

Traceback (most recent call last): 
    File "main.py", line 12, in <module> 
    theproc = subprocess.Popen(['C:\\CalledScript.py 
', cproc.pid], shell=True) 
    File "C:\Python27\lib\subprocess.py", line 679, in __init__ 
    errread, errwrite) 
    File "C:\Python27\lib\subprocess.py", line 852, in _execute_child 
    args = list2cmdline(args) 
    File "C:\Python27\lib\subprocess.py", line 587, in list2cmdline 
    needquote = (" " in arg) or ("\t" in arg) or not arg 
TypeError: argument of type 'int' is not iterable 

どのようなヘルプが優れています!おそらく非常に明白な質問を申し訳ありません。私はGoogle上で検索したが、多くの運を持っていなかった答えを見つける!私はちょうど先日、私はまだ学んでいるので、Pythonをつまんで始めた!

答えて

2

はないintとして、文字列としてPIDを渡してみてください:あなたは、文字列のリストとして引数を渡す場合

theproc = subprocess.Popen(['C:\\CalledScript.py', str(thePid)]) 

そしてshell=Trueを使用しては意味がありません。これを使用して私にとっては

+0

を!お二人ともご協力いただきありがとうございます! –

0

は動作します:

theproc = subprocess.Popen("./CalledScript.py " + str(thePid),shell=True) 

しかし、これは動作しません使用して:

theproc = subprocess.Popen(['./CalledScript.py', str(thePid)], shell=True) 

Ubuntuの、トリックをしたのpython 2.7.2+

関連する問題