2

私はpythonを学んでいて、どうすればいいのかわからなかったというちょっとした問題に遭遇しました。簡単にするために、Main と CalledScript の 2 つのスクリプトがあるとします。Main で実行可能ファイルを開いてその pid を取得し、それを変数に割り当ててから、CalledScript.py をサブプロセスとして開き、その変数を引数として渡します。ほとんどの場合、インポートを使用する方が良いオプションであることはわかっていますが、私の場合は、プロジェクトの他の部分のためにサブプロセスとして実行する必要があります。とにかく、これを行うとエラーが発生し続けます。pidを送信しようとしたときにのみ発生します。以下の変数「thePid」に「555」などの乱数を割り当てると、問題なく機能します。CalledScript がそれを受け取り、画面に出力すれば、すべて問題ありません。しかし、それに cproc.pid を割り当てて送信しようとしてもうまくいきません。

これ以上遅れることなく、簡単なサンプル コードを次に示します。

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

どんな助けでも素晴らしいでしょう!おそらく非常に明白な質問で申し訳ありません。私はグーグルで検索しましたが、答えを見つけるのはあまり運がありませんでした! 先日pythonをいじり始めたばかりなのでまだまだ勉強中です!

4

2 に答える 2

2

pidをintではなくstringとして渡してみてください。

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

また、引数を文字列のリストとして渡す場合は、使用しshell=Trueても意味がありません。

于 2012-05-12T13:06:09.543 に答える
0

これを使用する私にとっては、次のように機能します。

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

しかし、これを使用してもうまくいきません:

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

Ubuntu、Python 2.7.2+

于 2012-05-12T13:13:36.083 に答える