python-3.x 使用subprocess.Popen启动子流程时,主流程是否有影响?

bz4sfanl  于 2023-11-20  发布在  Python
关注(0)|答案(1)|浏览(118)

我试图找到有关使用Python的subprocess.Popen库启动Windows进程的“副作用”的信息。
我听说从Python启动Windows命令有一些好的/坏的做法,一家大型软件公司指责我的软件导致了他的崩溃,所以我想知道是否真的有任何副作用。
下面是一个片段来解释我的自我:

def execute_command(command, env=None):
    res = subprocess.Popen(command,
                           shell=True,
                           stdout=subprocess.PIPE,
                           stderr=subprocess.PIPE,
                           env=env,
                           creationflags=subprocess.CREATE_NO_WINDOW)

    start = time()
    output, error = res.communicate()
    execution_time = time() - start

    if output:
        output = output.decode(_SYSTEM_ENCODING, errors='replace')
    else:
        output = ""

    if error:
        error = error.decode(_SYSTEM_ENCODING, errors='replace')
    else:
        error = ""

    return res.returncode, output, error, execution_time

def start_software():

    # do some stuff

    execute_command('"C:\Program Files\Software\Software.exe" --foo --faa ')

    # do some other stuff

# This to avoid blocking my
# pyQt5 graphical interface, because the windows command 
# may be running by days or hours
th=Threading.thread(target=start_software)
th.start()

字符串
因此,据我所知,该命令的启动方式与用户在cmd中键入命令的方式相同,它在一个单独的进程中启动,并且不与主进程共享相同的内存。
我的代码片段包含在Python 3.7 Qt 5软件中,用pyinstaller编译,他们说,由于我的图形界面包括HTML,正在使用Windows库MsHTML,并导致第二个软件崩溃。

lmyy7pcs

lmyy7pcs1#

这是相当投机的,但希望至少对指导您的工作有一定的帮助。
Process isolation如果正确实现的话,应该可以防止任何两个进程相互干扰。事实上,我预测你的问题出在其他地方,即使是在Windows这个摇摇欲坠的平台上。
你的问题更有可能在于某些操作系统资源的冲突使用。线程的添加可能会导致这种情况。如果程序的GUI部分在后台使用了一些不是线程安全的东西,而竞争程序正在做同样的事情,结果可能是崩溃,或者更糟。
不幸的是,在这个细节水平上,不可能提供比疯狂的猜测更多的东西,因为我们无法访问竞争程序,或者你的程序中与实际崩溃的组件交互的部分。

相关问题