当前位置: 首页 > 面试题库 >

使用pythonw.exe时Python subprocess.call()失败

崔恺
2023-03-14
问题内容

当我使用python.exe运行它时,我有一些Python代码可以正常运行,但是如果使用pythonw.exe,则失败。

    def runStuff(commandLine):
        outputFileName ='somefile.txt'
        outputFile =打开(outputFileName,“ w”)

        尝试:
            结果= subprocess.call(commandLine,shell = True,stdout = outputFile)
        除:
            打印'抛出异常:',str(sys.exc_info()[1])

    myThread = threading.Thread(无,target = runStuff,commandLine = ['whatever ...'])
    myThread.start()

我收到的消息是:

    引发异常:[错误6]句柄无效

但是,如果我未指定’stdout’参数,则subprocess.call()会开始正常。

我可以看到pythonw.exe可能正在重定向输出本身,但是我看不到为什么我被阻止为新线程指定stdout。


问题答案:

sys.stdinsys.stdouthandle无效,因为pythonw作为守护进程运行时不提供控制台支持,因此默认参数subprocess.call()失败。

Deamon程序有意关闭stdin / stdout / stderr并改用日志记录,因此您必须自己进行管理:我建议使用subprocess.PIPE。

如果您 真的 不在乎子流程对错误和所有内容的说明,则可以使用os.devnull(我不确定它的可移植性吗?),但我不建议这样做。



 类似资料:
  • 问题内容: 长话短说:什么都不做,什么也不接受(我应该使用哪一个?) CMD窗口: 请告诉我我在做错什么。 问题答案: 如果你不希望在运行程序时弹出终端窗口,请使用; 否则,使用 关于语法错误: 现在是3.x中的函数,请 改用:

  • 我是PyQt5的新手,下面的代码出现了一个错误(pythonw.exe不再工作):

  • 我们的配置在 (为简洁起见略去) UserResource.java:

  • org.gradle.execution.multipleBuildFailures:生成完成,失败1次。在org.gradle.initialization.defaultgradleauncher$executeTasks.run(Defaultgradle.internal.operations.defaultbuildoperationexecutor$runnablebuildopera

  • 在我的应用程序中包含CN1Bluetooth代码后,我收到了一个构建失败。它在lib文件夹中,已经刷新了。在Android上工作,不会为iOS编译。 CompileC/var/folders/p7/d3z112yd0156kxkm2p21p8ym0000gn/t/build6615573583221835807xx/dist/build/build/mederationates/pods.buil

  • 我正在传递-XX:-UseSplitVerifier-Xverify:命令行上无,但我仍然收到错误错误,无法加载最新版本的配置文件[角度]。正在尝试Grails发布版本(使用--stacktrace查看完整跟踪) |运行Grails CLI时出错:连接超时(使用--stacktrace查看完整跟踪)