Python 子进程在几秒钟后返回,没有错误,但命令没有返回';我做不到它的工作
我正在使用一个subprocess.run()命令(1):Python 子进程在几秒钟后返回,没有错误,但命令没有返回';我做不到它的工作,python,python-3.x,subprocess,Python,Python 3.x,Subprocess,我正在使用一个subprocess.run()命令(1): p=subprocess.run([ “/home/ubuntu/my_script.sh”, “我的阿格1”, “我的_arg_2” ]) 如果我运行上面的程序,进程将在大约2秒后返回(太短了),并且不会生成它应该生成的少量文件(没有创建任何文件,就好像程序根本没有运行一样)。没有明显的错误或异常 现在,如果我从shell(2)运行以下命令: 程序运行约15秒(如预期的那样),并生成预期的文件 我对(2)中使用的linux命令和(1
p=subprocess.run([
“/home/ubuntu/my_script.sh”,
“我的阿格1”,
“我的_arg_2”
])
如果我运行上面的程序,进程将在大约2秒后返回(太短了),并且不会生成它应该生成的少量文件(没有创建任何文件,就好像程序根本没有运行一样)。没有明显的错误或异常
现在,如果我从shell(2)运行以下命令:
程序运行约15秒(如预期的那样),并生成预期的文件
我对(2)中使用的linux命令和(1)中参数的串联进行了双重和三重检查,以确保它们完全相同。但还是没有效果
我错过什么了吗?是否存在用户权限问题?如果subprocess.run()没有运行目标命令,它是如何在几秒钟后返回而不是立即返回的
编辑:
实际命令如下:
/home/ubuntu/DataScience/alphapose_dress.sh /home/ubuntu/dresses/whole-dresses/VahT2ei1no.jpg /home/ubuntu/dresses/alphapose_results
所以不,这与相对路径问题无关
EDIT2:
以下是:
cmd=[
config.alphapose_脚本,
img_路,
config.alphapose_outdir
]
将Popen(cmd,stdout=PIPE,bufsize=1,universal\u newlines=True)作为p:
对于p.stdout中的行:
打印(行,结束=“”)
。。。完全不打印或输出任何内容。而从shell运行的实际命令会输出许多行。请尝试以下操作:
从子流程导入运行,管道
p=运行([
“/home/ubuntu/my_script.sh”,
“我的阿格1”,
“我的_arg_2”
],stdout=管道,stderr=管道)
打印(p.stderr)
它将打印出错误 尝试将参数“shell=True”添加到调用中。what@MichaelButscher,但要考虑到使用
shell=True
通常被认为是危险的,尤其是当涉及用户输入时,绝对没有效果-仍然是完全相同的行为我猜这是两种情况下当前工作目录的不同,可能导致脚本失败,因为它无法找到/创建某个使用相对路径名引用的文件。尝试以下几点:(1)添加类似“date>/tmp/i_was_here.txt”的内容在shell脚本的开头,检查是否确实调用了它。(2) 确保脚本为chmod+x,并且它的开头有一个shell bang(#!/bin/bash)。(3) 将capture_output=True添加到subprocess.run()并发布添加print(repr(p))后得到的结果。您是一个英雄。
/home/ubuntu/DataScience/alphapose_dress.sh /home/ubuntu/dresses/whole-dresses/VahT2ei1no.jpg /home/ubuntu/dresses/alphapose_results