python子流程控制台输出-eclipse调用批处理调用python调用exe

python子流程控制台输出-eclipse调用批处理调用python调用exe,python,eclipse,windows,batch-file,subprocess,Python,Eclipse,Windows,Batch File,Subprocess,我想从eclipse完成工作,所以我使用eclipse的.launch配置。我试图使其直接运行python,但出现错误:错误193(%1不是有效的Win32应用程序)。其中%1可能是我的python脚本 我决定创建一个简单的批处理脚本,调用这个大型的野生python动物 我做了很多组合,发现这是最好的(批处理输出一些字符串,运行python,等待它,然后再次输出一些字符串): 它一直工作到python本身开始运行exe文件 我又一次尝试了很多组合: os.system([exe,arg1,arg

我想从eclipse完成工作,所以我使用eclipse的.launch配置。我试图使其直接运行python,但出现错误:
错误193(%1不是有效的Win32应用程序)
。其中%1可能是我的python脚本

我决定创建一个简单的批处理脚本,调用这个大型的野生python动物

我做了很多组合,发现这是最好的(批处理输出一些字符串,运行python,等待它,然后再次输出一些字符串):

它一直工作到python本身开始运行exe文件

我又一次尝试了很多组合:

os.system([exe,arg1,arg2,…])
子流程调用(..)
子流程检查输出(..)

->我要么在eclipse控制台中没有看到输出,要么输出被延迟,要么控制台中只有python/或exe的输出

最后,我使用了
subprocess.Popen(…)
,这几乎是正确的-唯一的缺陷是python脚本的输出不等待exe的进程完成,而当我使用
subprocess.Popen(…).wait()
exe将输出传递到控制台,但python脚本的整个输出将延迟到“exe”终止为止
。我只想延迟调用exe后写入的Python脚本输出部分

  • 如何实现这种“部分控制台输出延迟”是主要的主题
  • 关于python和eclipse.launch配置的建议将不胜感激
  • 对于如何在这些流程之间进行沟通的一般建议,我们将不胜感激

谢谢

在我看来,你有三个不同的过程要一起工作,你已经尝试了很多东西来让它工作,而且代码非常复杂,你不能轻易地把它发布到这里。这使得很难得到一个好的答案(堆栈溢出在有重点的问题上效果更好),但以下是我将采取的一般方法:

  • 如果试图直接从命令提示符运行
    Python\u script.py
    ,脚本是否运行?
    • 如果没有,那么研究在Windows中注册.py文件类型
    • 如果是,那么Eclipse启动配置可能不支持或不正确支持Windows注册的文件类型。不需要乱处理批处理文件和
      start
      ;只需将启动配置中的
      Python\u script.py
      替换为
      c:\Python27\Python.exe Python\u script.py
      (或类似)
  • 让您的脚本在命令提示符下工作—能够运行,具有正确的Python和子流程输出,并等待一切结束
  • 如果在命令提示符下工作,但在Eclipse中仍然不起作用,那么发布一个新问题,其中包含一小段代码,显示您正在尝试的内容以及错误的描述
    subprocess.call
    subprocess.check\u output
    ,以及
    Popen
    都有不同的用途,因此除了简单地给出建议外,很难给出一般性的建议

  • 在IIRC中,Eclipse使用管道化stdin和stdout运行进程。当stdout是管道或文件时,有些程序会缓冲其输出。您可以运行
    python.exe-u python\u script.py…
    至少防止python缓冲其标准输出。请尝试使用
    start”“/b/wait”python\u script.py“%1”“%2”“%3”“%4”“%5”
    (注意附加的
    );否则,
    start
    命令可能会将第一个(带引号的)字符串解释为窗口标题,而不是程序(在您的例子中是
    “Python\u script.py”
    )。-u选项适用于我!!1.是的。我尝试了eryksun在评论中提出的方法,因此在eclipse启动配置中,我放置了类似于“C:\Python34\python.exe C:\path\u to\u script\python\u script.py arg1 arg2 arg3”的内容,但输出与调用批处理调用python时的输出相同-这并不是我想要的\n'2。当我直接从CMD运行该脚本时,该脚本工作正常:“python python_script.py arg1 arg2 arg3”或“python arg1 arg2 arg3”(因此,wait函数使python脚本等待直到exe终止,但它不会在调用exe之前延迟脚本的输出。
    start /b /wait "Python_script.py" "%1" "%2" "%3" "%4" "%5"