Python 使用linux别名运行(分离的)QProcess并获得结果

Python 使用linux别名运行(分离的)QProcess并获得结果,python,linux,bash,pyqt,pyqt5,Python,Linux,Bash,Pyqt,Pyqt5,我正在尝试使用创建“runner”,但在使用Linux别名时遇到问题。 到目前为止,我已经能够使用以下代码运行别名(基于): 问题是,由于实际要运行的“程序”是bash,即使别名不存在,它也总是返回True,这意味着进程“相信”它已经启动,即使它实际上没有启动,因为bash已成功运行,即使它的别名尚未“找到” 显然,这不是一个跨平台的程序,我知道我可以尝试从别名的输出解析当前环境(但是,由于别名可能包括bash命令,这可能是一个问题)。 无论如何,我想知道是否有其他方法可以使用Linux别名运行

我正在尝试使用创建“runner”,但在使用Linux别名时遇到问题。
到目前为止,我已经能够使用以下代码运行别名(基于):

问题是,由于实际要运行的“程序”是bash,即使别名不存在,它也总是返回
True
,这意味着进程“相信”它已经启动,即使它实际上没有启动,因为
bash
已成功运行,即使它的别名尚未“找到”

显然,这不是一个跨平台的程序,我知道我可以尝试从
别名的输出解析当前环境(但是,由于别名可能包括bash命令,这可能是一个问题)。
无论如何,我想知道是否有其他方法可以使用Linux别名运行分离的QProcess,如果别名不存在,最终会得到
False
返回值。

正如所指出的:

boolqprocess::已开始详细说明(常量QString和程序,常量QStringList &参数,const QString&workingDirectory=QString(),qint64*pid= 空(PTR) 此函数重载startDetached()

以新格式的参数启动程序 进程,并从中分离。成功时返回真值;否则 返回false。如果调用进程退出,则分离的进程将 继续不受影响地运行

参数处理与相应的start()重载相同

该进程将在workingDirectory目录中启动。如果 workingDirectory为空,工作目录从 呼叫过程

如果功能成功,则将*pid设置为进程 已启动进程的标识符

(强调矿山)

换句话说,返回一个布尔值,指示命令是否已启动,它不会分析在程序执行过程中命令是否被破坏,因此它不适合您的需求

在这种情况下,解决方案是使用返回执行状态的完成信号:

从PyQt5导入QtCore
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
command=“foo”
app=QtCore.QCoreApplication(sys.argv)
process=QtCore.QProcess()
def on_已完成(exitCode,exitStatus):
打印(exitCode==0)
QtCore.QCoreApplication.quit()
process.finished.connect(on_finished)
process.start(“/bin/bash”、[“-i”、“-c”,命令])
sys.exit(app.exec_())
输出

False

从PyQt5导入QtCore
def check_别名(命令):
val=False
process=QtCore.QProcess()
loop=QtCore.QEventLoop()
def on_已完成(exitCode,exitStatus):
非局部val
val=exitCode==0
loop.quit()
process.finished.connect(on_finished)
process.start(“/bin/bash”、[“-i”、“-c”,命令])
loop.exec()
返回值
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
app=QtCore.QCoreApplication(sys.argv)
对于“foo”、“ls”中的命令:
打印(f“{command}:{check_alias(command)}”)
输出:

foo: False
ls: True
foo: False
ls: True

输出:

foo: False
ls: True
foo: False
ls: True

但是,根据这一点,我将无法运行分离的进程(如“独立运行进程”):我需要运行它并确保它实际启动,但在此之后,我还应该能够独立使用甚至关闭我的应用程序。据我所知,我担心我所寻找的实际上是不可能的,至少只使用Qt。(很抱歉回复太晚,顺便说一句,我没有时间测试它,因为我需要)@musicamante 1)似乎您不了解QProcess::startDetached如何与bash一起工作的流程,当您启动bash时,QProcess会收到通知,QProcess将不再侦听,但片刻之后,bash开始执行自己的命令,该命令可能会失败,也可能不会失败,并且不再通知QProcess。2) 正如您所指出的,使用QProcess::startDetached监控应用程序的生命周期是不可能的。3) 您案例的解决方案是使用QProcess进行监控,如我的示例所示。