我在管理python代码中的第三方可执行文件时有一种奇怪的行为。从概念上讲,我有以下python代码:
import subprocess
p = subprocess.Popen([r'c:\path\to\programme.exe', '-d'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
print p.returncode, out, err
这个工具崩溃了,在out
中显示它的回溯,并返回一个错误代码,表示“未处理的异常”。我用一个简单的os.system(...)
尝试了同样的结果。你知道吗
但是,有趣的是,当我将命令粘贴到windows shell中时,它可以完美地工作。。。你知道吗
C:\> c:\path\to\programme.exe -d
python解释器是32位的2.7.2版本。你知道吗
所以。。。导致坠机的这两个电话有什么不同?提前谢谢。你知道吗
额外信息
我不太确定这是否有帮助,但是这个外部工具连接到一个数据库并执行一些操作。对于一些RDBMS,当从python代码调用它时,它可以工作,但是当它连接到oracledb时,它崩溃了。所以python代码似乎是对的,只是有一个因素或区别我不知道。你知道吗
嗯,你提供的信息真的不多。我会根据自己处理这种情况的经验来做一个猜测。你知道吗
如果第三方应用程序需要权限,请确保您以管理员身份运行Python应用程序。
检查工作目录是否有问题。也就是说,如果程序打开某个文件或以任何方式引用某个相对路径,则在从python执行时必须更改工作目录。请参阅下面的代码了解如何做到这一点。
如果您正在执行的程序是内置的windows shell应用程序(dir、copy等),请考虑在创建
Popen
对象时使用shell=True
。参见Popen constructor参考。Python设置或修改第三方应用程序需要/使用的一些环境变量。
用于在运行的Python应用程序中更改工作目录的代码。你知道吗
你应该使用
raw string
。你知道吗否则您可以使用
\\
而不是像这样使用raw string
本文件:你知道吗相关问题 更多 >
编程相关推荐