如何获取子进程check_output以使用sys.argv调用脚本?

时间:2018-01-08 04:09:28

标签: python subprocess

我正在尝试将sys.argv与子进程中的脚本名称一起传递,该子进程调用另一个脚本并返回输出。我在尝试执行程序时遇到了几个不同的错误。一个是 TypeError:预期的str,bytes或os.PathLike对象,而不是int 。我用下面列出的代码得到了这个。

当我尝试将mytext转换为字符串时,str(15)我收到此错误:命令'('python /users/cmbp/p4e/helloworld_final2.py','15')'返回非 - 零退出状态1.

当我尝试运行子进程调用没有sys.argv的第二个脚本(helloworld_final2.py)时,它工作正常。

此外,当我从命令行使用sys.argv调用helloworld_final2.py文件时,它运行正常。例如,python /users/cmbp/p4e/helloworld_final2.py 15将在print语句中返回数字15。这不适用于脚本subprocess_test.py。

以下是带有子进程的脚本(subprocess_test.py):

import subprocess

mytext = 15
cmd = "python /users/cmbp/p4e/helloworld_final.py", mytext
output = subprocess.check_output(cmd, shell=True)
print(output.decode('utf-8'))

以下是我要调用的脚本(helloworld_final2.py):

import sys

def cooz():
    print (sys.argv[1])
    print ('hello world!')

def tooz():
    print ("here is another line")

print ("stuff")
tooz()
cooz()

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您可以通过将其格式化为列表来更改cmd

cmd = ["python",  "/users/cmbp/p4e/helloworld_final.py", str(mytext)]

然后

output = subprocess.check_output(cmd)
print(output.decode('utf-8'))

应该工作。