Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.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 未从失败的子进程.Popen获取任何错误消息_Python_Subprocess_Popen_Pdflatex_Communicate - Fatal编程技术网

Python 未从失败的子进程.Popen获取任何错误消息

Python 未从失败的子进程.Popen获取任何错误消息,python,subprocess,popen,pdflatex,communicate,Python,Subprocess,Popen,Pdflatex,Communicate,我设置了一个subprocess.Popen,通过pdflatex生成pdf。代码段: process = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True) output, err = process.communicate() print output print err 它工作正常,但问题是错误消息。如果pdflatex无法生成文件,例如,在打印输出结束时,我收到消息“发生致命错误,未生成输出PDF文件!”,我仍然

我设置了一个subprocess.Popen,通过pdflatex生成pdf。代码段:

process = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
output, err = process.communicate()

print output
print err
它工作正常,但问题是错误消息。如果pdflatex无法生成文件,例如,在打印输出结束时,我收到消息
“发生致命错误,未生成输出PDF文件!”
,我仍然会得到作为错误打印的
“无”

如有任何见解,将不胜感激

编辑:添加
stderr=subprocess.PIPE
帮助。我不再收到
“None”
,但无论生成pdf是否成功,我都会收到一条空白的错误消息。现在看起来是这样的:

process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
same as above
试试这个:

fout = open("temp.txt", "w")
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=fout, shell=True)

我更喜欢subprocess.check_output(),更方便。

@padraic cunningham删除只会给我带来诸如“没有这样的文件或目录”之类的错误(这是毫无意义的,因为它是通过shell=True找到的)。@padraic cunningham shell=True不是命令的一部分。我不确定您所说的是如何解决这个问题的:/command只是我拼凑的一个字符串,它在文件上运行pdflatex。它工作得非常好。@padraic cunningham我做得很好:,结果相同。正如上面编辑中提到的,一条空白的错误消息。它没有内容。我没有得到“没有”,只是一片空白。不管pdf是否成功生成,它都是空的。@padraic cunningham我是一个做作业的学生。我们得到了一行
out,err=proc.communicate()
,然后告诉我们输出in-out和err-in-err。然后我们被告知在终端上打印输出和错误。所以它非常具体。这给了我一个空白的“temp.txt”文件(我假设stderr=fout应该向fout写入任何错误)。您必须使用subprocess.PIPE吗?试试STDOUT。可能这不是一条错误信息。我不确定我是否理解?stdout给了我一个信息。我把每一行都剪掉,除了最后两行,因为它们不相关,然后打印出来。其中一行说“发生了致命错误,没有生成输出pdf文件!”,所以我假设这意味着它应该生成一条错误消息。。。你可以在这里看到: