Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 子进程在几秒钟后返回,没有错误,但命令没有返回';我做不到它的工作_Python_Python 3.x_Subprocess - Fatal编程技术网

Python 子进程在几秒钟后返回,没有错误,但命令没有返回';我做不到它的工作

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

我正在使用一个subprocess.run()命令(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