python子进程子线程不退出?
以下代码很奇怪:python子进程子线程不退出?,python,Python,以下代码很奇怪: def exec_shell(args, pipe = True): pre_fun = None if pipe == True: pre_fun = lambda: signal.signal(signal.SIGPIPE, signal.SIG_DFL) process = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
def exec_shell(args, pipe = True):
pre_fun = None
if pipe == True:
pre_fun = lambda: signal.signal(signal.SIGPIPE, signal.SIG_DFL)
process = subprocess.Popen(args, stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
preexec_fn = pre_fun)
(out, err) = process.communicate()
当我执行一个复杂的shell脚本时,
如果我将管道设置为true:
错误将是:
当2个线程正在运行时,一个线程退出
如果我将管道设置为false,错误将是:管道破裂
谁能帮我?谢谢您可以使用更简单的os.popen()函数。我的程序中的示例:
import os
manifest = os.popen("aapt dump badging " + apk).read() #running command
for info in manifest.splitlines():
... # extracting values
此外,子流程模块有一个错误:如果在subprocess.Popen()中指定了非ascii路径,则会发生错误。您将函数作为
参数传递什么?将参数pipe
设置为True只会设置SIGPIPE信号的默认处理程序,否则会终止进程,因此会出现不同的错误。所以我猜无论是什么命令args
都试图写入一个管道,该管道被关闭,您的命令将以SIGPIPE终止。您可以尝试在命令行上运行args
,查看是否出现断管错误。@EricAppelt命令run ags没有断管,但该命令正在执行一个shell脚本文件,但确实有一些重新更正…如果不了解更多关于args
的内容,很难判断问题可能是什么,但是您可以尝试将参数shell=True
添加到subprocess.Popen
。但是要小心-如果args
是由其他人提供的未初始化输入,则通常不应使用此选项。但您可以尝试使用os.popen)