2

我正在学习 python 并且遇到了一些我无法弄清楚如何去做的问题。为了简单起见,假设我有 2 个脚本:Main 和 CalledScript。我希望 Main 打开一个可执行文件并获取它的 pid,将其分配给一个变量,然后将 CalledScript.py 作为子进程打开并将该变量作为参数传递给它。虽然我知道在大多数情况下使用导入会是更好的选择,但在我的情况下,由于项目的其他部分,我必须将其作为子进程运行。无论如何,当我这样做时,我不断收到错误消息。它仅在我尝试发送 pid 时发生。如果我将下面的变量“thePid”分配给像“555”这样的随机数,它会工作得很好。CalledScript 会收到它,将它打印到屏幕上,一切都很好。但是尝试分配它 cproc.pid 并发送它并没有很好地完成。

事不宜迟,下面是一个简单的示例代码:

主文件

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)

调用脚本.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 传递:

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 回答