0

我有以下批处理文件(test.bat)

my.py < commands.txt

my.py 执行以下操作:

import sys

print sys.stdin.readlines()

如果我从命令行(从 Windows 7 中的 cmd.exe shell)启动此批处理文件,一切正常。

但是,如果我尝试通过subprocess.callpython 中的函数运行它,它就不起作用。

我如何尝试从 python 运行它:

import subprocess
import os

# Doesn't work !
rc = subprocess.call("test.bat", shell=True)
print rc

这是我收到的错误消息:

>my.py  0<commands.txt
Traceback (most recent call last):
  File "C:\Users\.....\my.py
", line 3, in <module>
    print sys.stdin.readlines()
IOError: [Errno 9] Bad file descriptor
1

我正在使用 python 2.7.2,但在 2.7.5 上我得到了相同的行为。

有任何想法吗?

4

2 回答 2

4

它应该是:

rc = subprocess.call(["cmd", "/c", "/path/to/test.bat"])

或使用外壳:

rc = subprocess.call("cmd /c /path/to/test.bat", shell=True)
于 2013-05-20T09:04:05.437 回答
1

这是否有效:

from subprocess import *

rc = Popen("test.bat", shell=True, stdout=PIPE, stderr=PIPE, stdin=PIPE)
print rc.stdout.readline()
print rc.stderr.readline()

rc.stdout.close()
rc.stdin.close()
rc.stderr.close()

我不确定你为什么提到:

my.py < commands.txt

输入与bat文件有什么关系吗?如果是这样,你打电话:

python my.py

它通过执行以下操作的子进程打开 batfile:

batfile < commands.txt

或者为什么这是相关的?

于 2013-05-20T09:15:32.427 回答