Python在任何平台上的自己的窗口中启动外部进程?

时间:2015-04-16 20:31:43

标签: python console subprocess cross-platform

我希望这不是一个骗局。我已经搜索过并搜索了很多帖子,但是到目前为止,我找不到我想要的内容。

我有一个Python 2.7应用程序,通过套接字通过第二个应用程序进行通信。我想这样做,以便在第一个Python应用程序启动时,它会自动启动第二个。

挑战在于我真的很喜欢在自己的控制台窗口中使用自己的控制台日志记录弹出第二个应用程序。问题是我的应用程序被不同平台上的人使用,所以我喜欢与平台无关的东西,到目前为止,我发现这样做是使用平台特定的东西。所以我想知道,这是甚至可能的事情吗?

我发现最接近的是使用subprocess.Popen,如下所示:

    subprocess.Popen(['python', 'myscript.py'],
        stdout=None,
        stderr=None,
        stdin=None)

(我知道我可以使用sys.executable而不是' python',但在某些情况下,需要运行的第二个应用程序不会成为Python应用程序。)

无论如何,上述工作除了第二个应用程序的输出显示与第一个应用程序在同一窗口中混合在一起。我尝试将shell = True转换为Popen的args(然后我按照Popen文档中的建议将args切换为字符串),如下所示:

    subprocess.Popen(['python myscript.py'],
        stdout=None,
        stderr=None,
        stdin=None,
        shell=True
        )

结果(至少在我的Mac上)和以前一样。第二个Python应用程序启动,但其输出混合到现有控制台窗口而不是启动新的。 (在Windows上我根本无法工作。我只是得到一个错误" python myscript.py"不是一个有效的命令。如果我将字符串更改为&#,结果相同34; python.exe myscript.py")

我不需要在应用程序之间进行任何通信,因为我已经通过套接字获得了所需的一切。 (我的应用程序是一个连接到外部媒体控制器的游戏控制器引擎,可以是Unity,Unreal,Python等。)

我尝试过各种各样的化身" old"方式,包括os.spawn,os.system和其他一些东西,但没有一个给出我希望的行为。我也尝试使用子进程的便利函数,但据我所知,直到子进程终止为止所有的块。

坦率地说,在这一点上,我能想到的最好的就是使用一个批处理文件(尽管据我所知,这必须是特定于操作系统的)?

所以我想知道是否有人知道我是否想要这样做?

谢谢! 布赖恩

0 个答案:

没有答案