【问题标题】:Windows - running .py directly vs running python blah.py behaves differentlyWindows - 直接运行 .py 与运行 python blah.py 的行为不同
【发布时间】:2011-10-29 14:45:00
【问题描述】:

我有一个使用子进程的 python 脚本:

import subprocess
print "Running stuff"
subprocess.check_call(["do_stuff.bat"])
print "Stuff run"

如果它被命名为 blah.py,并且我运行(从命令提示符):

python blah.py

我将从 do_stuff.bat(或我运行的任何东西)获取输出。

如果运行如下:

blah.py

然后我没有从 do_stuff.bat 得到输出,只有打印语句。

目前在 windows Server 2003 上看到过。Python 版本 2.5.2(由于各种原因卡在那里)。 查看我看到的关联文件类型操作:

Python.File="C:\Python25\python.exe" "%1" %*

那么谁能解释一下区别?

【问题讨论】:

  • 我会冒险猜测并说显式调用 python 使终端标准输出,而只是在其他地方调用文件管道标准输出。我无法证实这种预感。
  • 在运行 Python 2.6.6 的 windows 7 64 位上,在单独调用 blah.py 后,批处理的输出会打印到屏幕上。
  • 在我运行 Python 2.6.6 的 windows 7 32 位上无法重现。
  • 如果在子进程调用中显式分配 stdout 给 sys.stdout 会发生什么?
  • 在打印 sys.path 的 python 文件顶部添加一行。我想知道直接调用 python 解释器是否会导致与单独调用文件不同的路径。

标签: python windows subprocess


【解决方案1】:

我在使用线程时遇到了常见问题,但我所有的代码都在 python 中。线程无法使用 print 写入标准输出。只有主线程可以做到这一点。我用过这样的东西

import sys
sys.stdout.write("this was printed by thread")

我知道它可能不会帮助你处理 bat 文件...

【讨论】:

  • 这很有趣,并且可能与子流程的工作方式有关 - 它不会解决问题,但相关。
  • 线程不能使用 print 写入标准输出你为什么这么认为?
猜你喜欢
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-14
  • 1970-01-01
  • 2023-03-04
  • 2012-06-21
相关资源
最近更新 更多