- class QProcess#
用于启动外部程序并与它们通信的
QProcess
类。更多...概要#
方法#
def
__init__()
def
arguments()
def
environment()
def
error()
def
exitCode()
def
exitStatus()
定义
processId()
定义
program()
定义
setProgram()
定义
start()
定义
state()
插槽#
定义
kill()
定义
terminate()
信号#
静态函数#
定义
execute()
定义
nullDevice()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建票证来告知我们。
详细描述#
警告
本节包含自动从C++翻译到Python的代码片段,可能包含错误。
运行进程#
要启动一个进程,将您想要运行的程序的名称和命令行参数作为
start()
方法 的参数传入。参数作为单独的字符串在QStringList
中提供。或者,您可以使用
setProgram()
和setArguments()
方法设置程序运行环境,然后调用start()
或open()
。例如,以下代码片段通过将“-style”和“fusion”作为列表中的两项字符串传入,在X11平台上运行融合风格的模拟时钟示例。
parent = QObject() ... program = "./path/to/Qt/examples/widgets/analogclock" arguments = QStringList() arguments << "-style" << "fusion" myProcess = QProcess(parent) myProcess.start(program, arguments)
QProcess
然后进入Starting
状态,当程序启动时,QProcess
进入Running
状态并发出started()
信号。QProcess
允许您将进程作为顺序输入/输出设备处理。您可以像使用 QTcpSocket 访问网络连接一样写入和读取进程。您可以调用write()
将数据写入进程的标准输入,通过调用read()
、readLine()
和getChar()
读取标准输出。因为QIODevice
的继承,QProcess
也可以用作 QXmlReader 的输入源,或者用于使用 QNetworkAccessManager 上传数据。当进程退出时,
QProcess
会重新进入NotRunning
状态(初始状态),并发出finished()
信号。finished()
信号提供了进程的退出代码和退出状态作为参数,您还可以调用exitCode()
来获取最后一个完成进程的退出代码,并调用exitStatus()
来获取其退出状态。如果在任何时刻发生错误,QProcess
将发出errorOccurred()
信号。您还可以调用error()
来查找上次发生的错误类型,并调用state()
来查找当前进程状态。注意
QProcess
不支持 VxWorks、iOS、tvOS 或 watchOS。查找可执行文件#
要运行的程序可以通过调用
setProgram()
或直接在start()
调用中设置。使用程序名称和参数调用start()
的效果与先调用setProgram()
和setArguments()
,然后调用不带这些参数的重载函数相同。QProcess
会以三种不同的方式之一解析程序名称,类似于 Unix shell 和 Windows 命令解释器在自己的命令行中操作的方式。如果程序名称是绝对路径,则将启动该确切的可执行文件,且
QProcess
不进行搜索。如果程序名称是包含多个路径组件(即至少包含一个斜杠)的相对路径,则搜索该相对路径的起始目录依赖于操作系统:在Windows上,它是父进程的当前工作目录;而在Unix上,则是通过
setWorkingDirectory()
设置的那个目录。如果程序名称是一个没有斜杠的普通文件名,其行为依赖于操作系统。在Unix系统上,
QProcess
将搜索PATH
环境变量;在Windows上,由操作系统进行搜索,并首先搜索父进程的当前目录,然后在PATH
环境变量之前(有关完整列表,请参阅 CreateProcess 文档)。
为了避免平台相关的行为或与应用程序启动方式相关的问题,建议始终传递启动可执行文件时的绝对路径。对于与应用程序一起分发的辅助二进制文件,可以以
applicationDirPath()
开始构建这样一个路径。同样,要显式运行位于setWorkingDirectory()
设置的目录中的可执行文件,请使用以 “./” 或 “../” 开头的程序路径,具体取决于情况。在Windows上,除了在 CreateProcess 文档中概述的情况外,Most uses do not require the “.exe” suffix。此外,
QProcess
将将Unix样式的正斜杠转换为Windows路径的反斜杠,用于程序名称。这允许像上面示例中那样编写跨平台代码。QProcess
不支持直接执行Unix shell或Windows命令解释器的内置函数,例如cmd.exe
的dir
命令或Bourne外壳的export
。在Unix上,尽管许多shell内置函数也作为单独的可执行文件提供,但其行为可能与作为内置函数实现的那些不同。要运行这些命令,应显式使用适当的选项执行解释器。对于Unix系统,以两个参数启动 "/bin/sh":"-c" 和要运行的命令行字符串。对于Windows,由于 window的cmd.exe
非标准方式解析其命令行,请使用setNativeArguments()
(例如,"/c dir d:HAVEzep")。环境变量#
QProcess
API 提供了操作子进程所看到的环境变量的方法。默认情况下,子进程将复制在调用start()
函数时的当前进程环境变量的副本。这意味着在此调用之前使用qputenv()
执行的任何修改都将反映在子进程的环境中。请注意,QProcess
不会尝试防止其他线程中发生qputenv()
竞态条件的尝试,因此建议在应用程序启动后避免使用qputenv()
。可以使用
processEnvironment()
和setProcessEnvironment()
函数以及QProcessEnvironment
类来修改特定子进程的环境。默认情况下,processEnvironment()
将返回一个对象,其中inheritsFromParent()
的结果为 true。设置不继承自父进程的环境将导致QProcess
在启动子进程时使用确切的此环境。常规场景是从调用
systemEnvironment()
的当前环境开始,然后继续添加、更改或删除特定变量。然后将结果变量表应用到一个QProcess
,并使用setProcessEnvironment()
。可以通过使用 QProcessEnvironment() 默认构造函数,从空环境开始或将所有变量从环境中移除。除非在受控和系统特定条件下,否则不建议这样做,因为可能存在设置在当前进程环境中的系统变量,这些变量对于子进程的正确执行是必需的。
在 Windows 上,如果未设置,
QProcess
将复制当前进程的"PATH"
和"SystemRoot"
环境变量。无法完全取消设置,但可以将其设置为空值。在 Windows 上将"PATH"
设置为空很可能会导致子进程无法启动。通过通道通信
进程有两个预定义的输出通道:标准输出通道(
stdout
)提供常规控制台输出,标准错误通道(stderr
)通常提供进程打印的错误。这些通道代表两个独立的数据流。您可以通过调用setReadChannel()
在它们之间切换。当当前读取通道上有可用数据时,QProcess
会发出readyRead()
信号。当有新的标准输出数据可用时,会发出readyReadStandardOutput()
信号;当有新的标准错误数据可用时,会发出readyReadStandardError()
信号。您可以通过调用read()
、readLine()
或getChar()
读取数据,也可以显式通过调用readAllStandardOutput()
或readAllStandardError()
从两个通道中的任一通道读取所有数据。通道的术语可能会令人误解。请注意,进程的输出通道对应于
QProcess
的 read 通道,而进程的输入通道对应于QProcess
的 write 通道。这是因为我们用QProcess
读取的是进程的输出,而我们写入的变成进程的输入。QProcess
可以合并两个输出通道,这样正在运行的过程的标准输出和标准错误数据都使用标准输出通道。在启动过程之前,调用setProcessChannelMode()
与MergedChannels
以激活此功能。您还可以通过将ForwardedChannels
作为参数传递来将运行过程输出转发到调用,主过程。您还可以只转发输出通道中的一个——通常人们会使用ForwardedErrorChannel
,但也存在ForwardedOutputChannel
。请注意,使用通道转发在GUI应用程序中通常是一个糟糕的主意——您应该以图形方式呈现错误。某些过程需要特殊的环境设置才能运行。您可以通过调用
setProcessEnvironment()
为您的过程设置环境变量。要设置工作目录,请调用setWorkingDirectory()
。默认情况下,过程在调用过程的当前工作目录中运行。使用
QProcess
启动的GUI应用程序窗口的位置和屏幕Z顺序由底层窗口系统控制。对于Qt 5应用程序,可以使用-qwindowgeometry
命令行选项来指定位置;X11应用程序通常接受-geometry
命令行选项。同步过程API
QProcess
提供了一组函数,使其能够在不需要事件循环的情况下使用,通过挂起调用线程直到某些信号被发射waitForStarted()
阻塞,直到过程已启动。waitForReadyRead()
阻塞,直到在当前读取通道上有新数据可供读取。waitForBytesWritten()
阻塞,直到已将一个数据负载写入过程。waitForFinished()
阻塞,直到过程已完成。
从主线程(调用 QApplication::exec() 的线程)调用这些函数可能会导致您的用户界面冻结。
以下示例在没有事件循环的情况下运行
gzip
以压缩字符串“Qt rocks!”gzip = QProcess() gzip.start("gzip", QStringList() << "-c") if not gzip.waitForStarted(): return False gzip.write("Qt rocks!") gzip.closeWriteChannel() if not gzip.waitForFinished(): return False result = gzip.readAll()
另请参阅
- class ProcessError#
此枚举描述了
QProcess
报告的不同类型错误。常量
描述
QProcess.FailedToStart
进程启动失败。可能是调用的程序缺失,或者您可能没有足够的权限或资源来调用该程序。
QProcess.Crashed
进程在成功启动一段时间后崩溃。
QProcess.Timedout
最后一个 waitFor…() 函数超时。QProcess 的状态未改变,您可以尝试再次调用 waitFor…()。
QProcess.WriteError
尝试写入进程时发生错误。例如,进程可能未运行,或者它可能已关闭其输入通道。
QProcess.ReadError
尝试从进程读取时发生错误。例如,进程可能未运行。
QProcess.UnknownError
发生未知错误。这是
error()
的默认返回值。另请参阅
- class ProcessState#
此枚举描述了
QProcess
的不同状态。常量
描述
QProcess.NotRunning
该进程未运行。
QProcess.Starting
该进程正在启动,但程序尚未被调用。
QProcess.Running
该进程正在运行,并准备好进行读取和写入。
另请参阅
- class ProcessChannel#
此枚举描述了运行进程使用的进程通道。将这些值之一传递给
setReadChannel()
以设置 QProcess 的当前读取通道。常量
描述
QProcess.StandardOutput
运行进程的标准输出(stdout)。
QProcess.StandardError
运行进程的标准错误(stderr)。
另请参阅
- class ProcessChannelMode#
这个枚举描述了
QProcess
的进程输出通道模式。将这些值之一传递给setProcessChannelMode()
函数来设置当前读取通道模式。常量
描述
QProcess.SeparateChannels
QProcess
管理正在运行的进程的输出,将标准输出和标准错误数据保存在单独的内部缓冲区中。您可以通过调用setReadChannel()
函数来选择QProcess
的当前读取通道。这是QProcess
的默认通道模式。QProcess.MergedChannels
QProcess
将正在运行的进程的输出合并到标准输出通道(stdout
)。标准错误通道(stderr
)将不会接收任何数据。正在运行的进程的标准输出和标准错误数据将交错。对于分离的进程,正在运行的进程的合并输出将转发到主进程。QProcess.ForwardedChannels
QProcess
将正在运行的进程的输出转发到主进程。子进程对其标准输出和标准错误的任何写入都将写入主进程的标准输出和标准错误。QProcess.ForwardedErrorChannel
QProcess
管理正在运行的进程的标准输出,但将其标准错误转发到主进程。这反映了命令行工具作为筛选器的典型用法,其中标准输出被重定向到另一个进程或文件,而标准错误用于诊断目的输出到控制台。(此值自 Qt 5.2 引入。)QProcess.ForwardedOutputChannel
ForwardedErrorChannel 的补充。(此值自 Qt 5.2 引入。)
注意
Windows 故意抑制仅 GUI 应用程序的输出到继承的控制台。这 不 适用于重定向到文件或管道的输出。要在控制台上即使如此转发仅 GUI 应用程序的输出,必须使用 SeparateChannels 并自己通过读取输出并将其写入适当的输出通道来进行转发。
- class InputChannelMode#
这个枚举描述了
QProcess
的进程输入通道模式。将这些值之一传递给setInputChannelMode()
函数来设置当前写入通道模式。常量
描述
QProcess.ManagedInputChannel
QProcess.ForwardedInputChannel
-
常量
描述
QProcess.NormalExit
QProcess.CrashExit
另请参阅
-
常量
描述
QProcess.UnixProcessFlag.CloseFileDescriptors
QProcess.UnixProcessFlag.CreateNewSession
QProcess.UnixProcessFlag.DisconnectControllingTerminal
QProcess.UnixProcessFlag.IgnoreSigPipe
总是将
SIGPIPE
信号设置为忽略(SIG_IGN
),即使设置了ResetSignalHandlers
标志。默认情况下,如果子进程尝试在其标准输出或标准错误添加后关闭相应的通道(使用closeReadChannel()
),则它将收到SIGPIPE
信号并立即终止;使用此标志时,写操作失败但没有信号,子进程可能继续执行。QProcess.UnixProcessFlag.ResetIds
删除当前进程可能仍然保留的任何有效用户或组ID(请参阅
setuid(2)
和setgid(2)
,以及QCoreApplication::setSetuidAllowed())。如果当前进程设置了setuid或setgid,并且不想让子进程保留提升的权限,则这很有用。QProcess.UnixProcessFlag.ResetSignalHandlers
将所有Unix信号处理程序重置为其默认状态(即,通过
signal(2)
将SIG_DFL
传递给它)。此标志用于确保任何被忽略(SIG_IGN
)的信号不会影响子进程的行为。QProcess.UnixProcessFlag.UseVFork
请求QProcess使用
vfork(2)
启动子进程。使用此标志来指示与setChildProcessModifier()
设置的回调函数在vfork(2)
的子进程中是安全的;也就是说,回调不修改任何非局部变量(直接或通过它调用的任何函数),也不尝试与父进程通信。如果QProcess实际上将使用vfork(2)
,以及如果vfork(2)
与标准fork(2)
不同,这是由实现定义的。6.6版本中新引入。
使用给定的
parent
构造一个QProcess
对象。- arguments()#
- 返回类型::
字符串列表
返回进程最后一次启动时使用的命令行参数。
另请参阅
- closeReadChannel(channel)#
- 参数::
channel –
ProcessChannel
关闭读取通道
channel
。调用此函数后,QProcess
将不再接收通道上的数据。任何已接收的数据仍可用于读取。如果您对进程的输出不感兴趣,调用此函数以节省内存。
- closeWriteChannel()#
警告
本节包含自动从C++翻译到Python的代码片段,可能包含错误。
安排
QProcess
的写入通道关闭。通道将在所有数据都已写入进程后关闭。调用此函数后,任何尝试写入进程都将失败。对于需要一直读取输入数据直到通道关闭的程序,关闭写入通道是必要的。例如,"more" 程序在 Unix 和 Windows 的控制台中都用于显示文本数据。但是,它不会显示文本数据,直到
QProcess
的写入通道关闭。示例more = QProcess() more.start("more") more.write("Text to display") more.closeWriteChannel() # QProcess will emit readyRead() once "more" starts printing
在调用
start()
时会隐式打开写入通道。另请参阅
- environment()#
- 返回类型::
字符串列表
返回
QProcess
将传递给子进程的环境,或者在未使用setEnvironment()
设置环境的情况下,返回一个空的QStringList
。如果未设置环境,将使用调用进程的环境。- error()#
- 返回类型::
返回上次发生错误的类型。
另请参阅
- errorOccurred(error)#
- 参数::
error –
ProcessError
指定的
error
描述了发生的错误类型。- 静态execute(program[, arguments={}])#
- 参数::
program – str
arguments – 字符串列表
- 返回类型::
int
在新进程中启动程序
program
并使用参数arguments
,等待其完成并返回进程的退出代码。新进程写入控制台的数据会转发到调用进程。环境和工作目录从调用进程继承。
参数处理与各自的
start()
调用重载相同。如果无法启动进程,则返回 -2。如果进程崩溃,则返回 -1。否则,返回进程的退出代码。
另请参阅
- exitCode()#
- 返回类型::
int
返回最后一个完成的进程的退出代码。
除非
exitStatus()
返回NormalExit
,否则此值不正确。- exitStatus()#
- 返回类型::
返回最后一个完成的进程的退出状态。
在 Windows 上,如果另一个应用程序使用 TerminateProcess() 终止了进程,此函数仍将返回
NormalExit
,除非退出代码小于 0。- failChildProcessModifier(description[, error=0])#
- 参数::
description – str
error – int
该函数可以与
setChildProcessModifier()
一起使用,在修饰符集中表示遇到了错误条件。当修饰符调用这些函数时,QProcess
将在父进程中触发errorOccurred()
信号,带有代码FailedToStart
。description
可以被用来在errorString()
中包含一些信息以帮助诊断问题,通常是失败的调用名称,类似于 C 库函数perror()
的行为。此外,error
参数可以是一个<errno.h>
错误码,其文本形式也会被包含在内。例如,一个子修饰符可以按照这种方式为子进程准备一个额外的文件描述符
process.setChildProcessModifier([fd, &process]() { if (dup2(fd, TargetFileDescriptor) < 0) process.failChildProcessModifier(errno, "aux comm channel"); }); process.start();
其中
fd
是在父进程中已打开的文件描述符。如果dup2()
系统调用导致了EBADF
条件,进程的errorString()
可能是:“子进程修饰符报告错误:辅助通信通道:无效文件描述符”。此函数不会返回调用者。除了在子修饰符中以及使用正确的
QProcess
对象之外使用它是不确定的。注意
实现强加了一个长度限制到
description
参数的约500个字符。这不包括错误码的文本。另请参阅
setChildProcessModifier()
setUnixProcessParameters()
- finished(exitCode[, exitStatus=QProcess.ExitStatus.NormalExit])#
- 参数::
exitCode – int
exitStatus –
ExitStatus
当进程完成时,将发出此信号。
exitCode
表示进程的退出代码(仅对正常退出有效),而exitStatus
表示退出状态。进程完成后,QProcess
中的缓冲区仍然保持完好。您仍然可以读取进程在完成前可能写入的任何数据。另请参阅
- inputChannelMode()#
- 返回类型::
返回
QProcess
标准输入通道的通道模式。- kill()#
终止当前进程,导致其立即退出。
在 Windows 上,kill() 使用 TerminateProcess,而在 Unix 和 macOS 上,会向进程发送 SIGKILL 信号。
另请参阅
- 静态 nullDevice()#
- 返回类型::
str
操作系统的空设备。
返回的文件路径使用本机目录分隔符。
- processChannelMode()#
- 返回类型::
返回
QProcess
标准输出和标准错误通道的通道模式。- processEnvironment()#
- 返回类型::
返回
QProcess
将传给其子进程的环境。如果没有使用setProcessEnvironment()
设置环境,此方法将返回一个表示环境将从父进程继承的对象。另请参阅
- processId()#
- 返回类型::
int
如果可用,返回运行进程的本地进程标识符。如果没有进程当前在运行,则返回
0
。- program()#
- 返回类型::
str
返回进程上次启动时使用的程序。
另请参阅
- readAllStandardError()#
- 返回类型::
不顾当前的读取通道,此函数将返回进程标准错误的全部可用数据,作为一个
QByteArray
。- readAllStandardOutput()#
- 返回类型::
不顾当前的读取通道,此函数将返回进程标准输出的全部可用数据,作为一个
QByteArray
。返回
QProcess
的当前读取通道。另请参阅
- readyReadStandardError()#
当进程通过其标准错误通道(stderr)提供新数据时,将发出此信号。它会发出,而不论当前的
read channel
是什么。- readyReadStandardOutput()#
当进程通过其标准输出通道(stdout)提供新数据时,将发出此信号。它会发出,而不论当前的
read channel
是什么。- setArguments(arguments)#
- 参数::
arguments – 字符串列表
设置启动进程时要传递给调用程序的参数。此函数必须在调用
start()
之前调用。- setEnvironment(environment)#
- 参数::
环境 – 字符串列表
警告
本节包含自动从C++翻译到Python的代码片段,可能包含错误。
设置将传递给子进程的环境,其中
QProcess
将通过的环境变量列表。参数environment
是键值对的列表。例如,以下代码添加了环境变量
TMPDIR
process = QProcess() env = QProcess.systemEnvironment() env << "TMPDIR=C:\\MyApp\\temp" # Add an environment variable process.setEnvironment(env) process.start("myapp")
注意
此函数比
setProcessEnvironment()
函数效率低。- setInputChannelMode(mode)#
- 参数::
该 mode –
InputChannelMode
将
QProcess
标准输入通道的通道模式设置为指定的mode
。在下次调用start()
时将使用此模式。- setProcessChannelMode(mode)#
- 参数::
mode –
ProcessChannelMode
警告
本节包含自动从C++翻译到Python的代码片段,可能包含错误。
将
QProcess
的标准输出和标准错误通道的通道模式设置为指定的mode
。在下次调用start()
时将使用此模式。例如builder = QProcess() builder.setProcessChannelMode(QProcess.MergedChannels) builder.start("make", QStringList() << "-j2") if not builder.waitForFinished(): print("Make failed:", builder.errorString()) else: print("Make output:", builder.readAll())
- setProcessEnvironment(environment)#
- 参数::
环境 –
QProcessEnvironment
警告
本节包含自动从C++翻译到Python的代码片段,可能包含错误。
设置将要传递给子进程的
环境
。例如,以下代码添加了环境变量
TMPDIR
process = QProcess() env = QProcessEnvironment.systemEnvironment() env.insert("TMPDIR", "C:\\MyApp\\temp") # Add an environment variable process.setProcessEnvironment(env) process.start("myapp")
注意,在 Windows 中,环境变量名称不区分大小写。
另请参阅
- setProcessState(state)#
- 参数::
状态 -
ProcessState
将
QProcess
的当前状态设置为指定的状态
。另请参阅
- setProgram(program)#
- 参数::
program – str
设置启动进程时要使用的
程序
。此函数必须在start()
调用之前调用。如果
program
是一个绝对路径,则它指定要启动的确切可执行文件。相对路径将以平台特定的方式解析,包括搜索PATH
环境变量(有关详细信息,请参阅查找可执行文件
)。- setReadChannel(channel)#
- 参数::
channel –
ProcessChannel
将当前读写通道的
QProcess
设置为指定的channel
。当前输入通道被下面这些函数使用:read()
,readAll()
,readLine()
,以及getChar()
。它还决定了哪个通道触发QProcess
发射readyRead()
事件。另请参阅
- setStandardErrorFile(fileName[, mode=QIODeviceBase.OpenModeFlag.Truncate])#
- 参数::
fileName – 字符串
mode –
OpenModeFlag
的组合
将进程的标准错误重定向到名为
fileName
的文件。当重定向生效后,标准错误读通道将被关闭:使用read()
读取将始终失败,同样readAllStandardError()
也会失败。如果mode
是追加模式,文件将会被追加到,否则将会被截断。有关文件打开方式的更多信息,请参阅
setStandardOutputFile()
。注意:如果使用
setProcessChannelMode()
函数并传入参数为MergedChannels
,则此函数没有任何效果。- setStandardInputFile(fileName)#
- 参数::
fileName – 字符串
将进程的标准输入重定向到由
fileName
指定的文件。当存在输入重定向时,QProcess
对象将处于只读模式(调用write()
将导致错误)。要使进程立即读取 EOF,请在此处传入
nullDevice()
。这比在写入任何数据之前使用closeWriteChannel()
更干净,因为它可以在启动进程之前设置。如果:
fileName
文件在调用start()
时不存在或不可读,启动进程将失败。进程启动后调用
setStandardInputFile()
无效。- setStandardOutputFile(fileName[, mode=QIODeviceBase.OpenModeFlag.Truncate])#
- 参数::
fileName – 字符串
mode –
OpenModeFlag
的组合
将进程的标准输出重定向到文件
fileName
。当重定向设置时,标准输出读取通道关闭:使用read()
读取它将始终失败,同样适用readAllStandardOutput()
。要丢弃进程的所有标准输出,请在此处传入
nullDevice()
。这比简单地不读取标准输出更有效率,因为没有填充任何QProcess
缓冲区。如果在调用
start()
时文件fileName
不存在,它将被创建。如果无法创建,启动将失败。如果文件存在且
mode
是 QIODevice::Truncate,则文件将被截断。否则(如果mode
是 QIODevice::Append),则将文件追加到。进程启动后调用
setStandardOutputFile()
无效。如果
fileName
是一个空字符串,它将停止重定向标准输出。这在重定向后恢复标准输出时非常有用。警告
本节包含自动从C++翻译到Python的代码片段,可能包含错误。
将此进程的标准输出流管道传输到
destination
进程的标准输入。以下shell命令
command1 | command2
可以使用以下代码与
QProcess
实现process1 = QProcess() process2 = QProcess() process1.setStandardOutputProcess(process2) process1.start("command1") process2.start("command2")
- setUnixProcessParameters(flagsOnly)#
- 参数::
flagsOnly – 组合
UnixProcessFlag
这是一个重载函数。
为Unix系统中的子进程设置额外的
flagsOnly
设置。这等同于只需设置flags
字段的重载。注意
此函数仅在Unix平台上可用。
另请参阅
unixProcessParameters()
- setUnixProcessParameters(params)
- 参数::
params –
UnixProcessParameters
为Unix系统中的子进程设置额外的设置和参数为
params
。此函数可以用来在启动目标可执行文件之前请求QProcess
修改子进程。此函数可以用来更改子进程的某些属性,例如关闭所有无关的文件描述符、更改子进程的优先级或从控制TTY断开连接。为了更精细地控制子进程或以其他方式对其进行修改,请使用
setChildProcessModifier()
函数。如果同时设置了子进程修改器和Unix进程参数,则会在应用这些参数之前运行修改器。注意
此函数仅在Unix平台上可用。
另请参阅
unixProcessParameters()
- setWorkingDirectory(dir)#
- 参数::
dir – 字符串
将工作目录设置为
dir
。在QProcess
中,进程将在该目录下启动。默认行为是在调用进程的工作目录中启动进程。- 静态 splitCommand(command)#
- 参数::
command – 字符串
- 返回类型::
字符串列表
将字符串
command
分割成令牌列表并返回该列表。带有空格的令牌可以用双引号包围;三个连续的双引号代表引号字符本身。
- start(program[, arguments={}[, mode=QIODeviceBase.OpenModeFlag.ReadWrite]])#
- 参数::
program – str
arguments – 字符串列表
mode –
OpenModeFlag
的组合
在新的进程中启动给定的
program
,通过在arguments
中传递命令行参数。有关QProcess
如何搜索要运行的执行文件的信息,请参阅setProgram()
。OpenMode 设置为mode
。不进一步拆分参数。PySide6.QtCore.QProcess 对象将立即进入启动状态。如果进程启动成功,则会发出
started()
信号;否则将发出errorOccurred()
信号。请注意,在能够同步启动子进程的平台(特别是Windows)上,这些信号将在此函数返回之前发出,此QProcess
对象将分别过渡到Running
或NotRunning
状态。在其他平台上,started()
和errorOccurred()
信号将被延迟。通过调用
waitForStarted()
来确保进程已启动(或启动失败)且已发出这些信号。即使已知道进程的启动状态,调用该函数也是安全的,尽管信号不会再被发出。Windows: 参数被引号包裹并合并成一个与 Windows 函数
CommandLineToArgvW()
兼容的命令行。对于具有不同命令行引号要求的程序,您需要使用setNativeArguments()
。一个不遵循CommandLineToArgvW()
规则的著名程序是 cmd.exe,因此所有批处理脚本也不例外。如果
QProcess
对象已经运行一个进程,则在控制台可能会打印出警告信息,而现有的进程将继续运行不受影响。注意
启动子进程成功仅意味着操作系统已成功创建进程并为其分配了每个进程都有的资源,例如进程ID。子进程可能非常早期就崩溃或失败,因此不会产生预期的输出。在大多数操作系统中,这可能包括动态链接错误。
另请参阅
processId()
started()
waitForStarted()
setNativeArguments()
- start([mode=QIODeviceBase.OpenModeFlag.ReadWrite])
- 参数::
mode –
OpenModeFlag
的组合
这是一个重载函数。
启动由
setProgram()
设置的程序,使用setArguments()
设置的参数。OpenMode 设置为mode
。另请参阅
open()
setProgram()
setArguments()
- startCommand(command[, mode=QIODeviceBase.OpenModeFlag.ReadWrite])#
- 参数::
command – 字符串
mode –
OpenModeFlag
的组合
警告
本节包含自动从C++翻译到Python的代码片段,可能包含错误。
在一个新的进程中启动命令
command
。OpenMode 设置为mode
。command
是包含程序名称及其参数的单个文本字符串。参数由一个或多个空格分隔。例如process = QProcess() process.startCommand("del /s *.txt") # same as process.start("del", QStringList() << "/s" << "*.txt") ...
包含空格的参数必须用引号引起来,才能正确地提供给新进程。例如
process = QProcess() process.startCommand("dir \"My Documents\"")
在
command
字符串中的字面引号表示为三重引号。例如process = QProcess() process.startCommand("dir \"Epic 12\"\"\" Singles\"")
在
command
字符串被拆分和取消引号后,此函数表现得像start()
一样。在操作系统中,系统 API 原生使用单个字符串传递命令行参数给子进程(Windows),可能存在无法通过
QProcess
的可移植基于列表的 API 传递命令行。在这些罕见情况下,您需要使用setProgram()
和setNativeArguments()
而不是此函数。另请参阅
- 静态startDetached(program[, arguments={}[, workingDirectory=""]])#
- 参数::
program – str
arguments – 字符串列表
workingDirectory – 字符串
- 返回类型::
(retval, pid)
此函数重载了
startDetached()
。以新进程启动程序
program
,并与其解除关联。成功时返回true
;失败时返回false
。如果调用进程退出,解除关联的进程将继续运行而不会受到影响。参数处理与各自的
start()
调用重载相同。进程将在目录
workingDirectory
中启动。如果workingDirectory
为空,工作目录将继承自调用进程。如果函数成功,则 *``pid`` 将设置为启动进程的进程标识符。
另请参阅
- startDetached([pid=None])
- 参数::
pid –
qint64
- 返回类型::
bool
以新进程启动由
setProgram()
设置的程序,以及使用setArguments()
设置的参数。成功时返回true
;否则返回false
。如果调用进程退出,解除关联的进程将继续运行而不会受到影响。Unix: 启动的进程将在自己的会话中运行,并像守护进程一样操作。
进程将在由
setWorkingDirectory()
设置的目录中启动。如果workingDirectory()
为空,工作目录将继承自调用进程。如果函数成功则 *``pid`` 将设置为启动进程的进程标识符;否则,它将被设置为 -1。请注意,子进程可能会突然退出,并且 PID 可能会变得无效。此外,在子进程退出后,相同的 PID 可能会被回收并用于完全不同的进程。用户代码在使用此变量时应谨慎,特别是如果打算通过操作系统方式强制终止进程。
startDetached() 只支持以下属性设置器:
setCreateProcessArgumentsModifier()
setNativeArguments()
QProcess 对象的其他所有属性都将被忽略。
注意
被调用进程将继承调用进程的控制台窗口。要抑制控制台输出,请将标准错误输出重定向到
nullDevice()
。另请参阅
start()
startDetached(const QString &program, const QStringList &arguments, const QString &workingDirectory, qint64 *pid)
- started()#
此信号由
QProcess
在进程启动时发出,当state()
返回运行中
时。- state()#
- 返回类型::
返回进程的当前状态。
另请参阅
- stateChanged(state)#
- 参数::
状态 -
ProcessState
此信号在
QProcess
的状态改变时发出。`newState` 参数是QProcess
更改到的状态。- static systemEnvironment()#
- 返回类型::
字符串列表
警告
本节包含自动从C++翻译到Python的代码片段,可能包含错误。
以键值对列表的形式返回调用进程的环境。
environment = QProcess.systemEnvironment() # environment = {"PATH=/usr/bin:/usr/local/bin", # "USER=greg", "HOME=/home/greg"}
此函数不会缓存系统环境,因此如果已经调用了类似
setenv
或putenv
之类的低级 C 库函数,则可以在更新后获取环境的版本。但是请注意,重复调用此函数将重新创建环境变量列表,这是一个相当复杂的操作。
- terminate()#
尝试终止进程。
调用此函数后,进程可能不会退出(它会有机会提示用户保存未保存的文件等)。
在Windows上,terminate()会将WM_CLOSE消息发送到进程的所有顶层窗口,然后发送到进程主线程本身。在Unix和macOS上,将发送
SIGTERM
信号。Windows上的控制台应用程序如果没有运行事件循环,或者其事件循环未处理WM_CLOSE消息,则只能通过调用
kill()
来终止。另请参阅
- unixProcessParameters()#
- 返回类型::
Unix进程参数
返回描述将应用于Unix系统子进程的额外标志和设置的
UnixProcessParameters
对象。默认设置对应于默认构造的UnixProcessParameters
。- waitForFinished([msecs=30000])#
- 参数::
msecs – int
- 返回类型::
bool
阻塞直到进程已结束并已发出
finished()
信号,或者直到经过msecs
毫秒。如果进程已结束,则返回
true
;否则返回false
(如果操作超时、发生错误或此QProcess
已终止)。此函数可以在没有事件循环的情况下运行。在编写非GUI应用程序和在非GUI线程中执行I/O操作时非常有用。
警告
从主(GUI)线程调用此函数可能会使您的用户界面冻结。
如果msecs为-1,则此函数不会超时。
另请参阅
finished()
waitForStarted()
waitForReadyRead()
waitForBytesWritten()
- waitForStarted([msecs=30000])#
- 参数::
msecs – int
- 返回类型::
bool
阻塞直到进程已启动并已发出
started()
信号,或者直到经过msecs
毫秒。如果进程成功启动,则返回
true
;否则返回false
(如果操作超时或发生错误)。如果该函数在此函数之前已成功启动进程,则立即返回。此函数可以在没有事件循环的情况下运行。在编写非GUI应用程序和在非GUI线程中执行I/O操作时非常有用。
警告
从主(GUI)线程调用此函数可能会使您的用户界面冻结。
如果msecs为-1,则此函数不会超时。
注意
在某些UNIX操作系统上,此函数可能返回true,但进程后续可能会报告一个
FailedToStart
错误。另请参阅
started()
waitForReadyRead()
waitForBytesWritten()
waitForFinished()
- workingDirectory()#
- 返回类型::
str
如果
QProcess
已被分配了工作目录,此函数将返回在程序开始之前QProcess
将进入的工作目录。否则(即没有分配目录),将返回空字符串,并且QProcess
将使用应用程序的当前工作目录。