我正在尝试将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()
非常感谢任何帮助!
答案 0 :(得分:1)
您可以通过将其格式化为列表来更改cmd
。
cmd = ["python", "/users/cmbp/p4e/helloworld_final.py", str(mytext)]
然后
output = subprocess.check_output(cmd)
print(output.decode('utf-8'))
应该工作。