使用python 2.4的输入重定向运行shell命令?

SMT*_*MTF 12 python shell io-redirection

我想要实现的是启动以下shell命令:

mysql -h hostAddress -u userName -p userPassword 
databaseName < fileName
Run Code Online (Sandbox Code Playgroud)

在python 2.4脚本中,有一些不同的东西:

cmd = ["mysql", "-h", ip, "-u", mysqlUser, dbName, "<", file]
subprocess.call(cmd)
Run Code Online (Sandbox Code Playgroud)

由于使用了重定向符号(我相信)这个pukes - mysql没有收到输入文件.

我也尝试过:

subprocess.call(cmd, stdin=subprocess.PIPE)
Run Code Online (Sandbox Code Playgroud)

没有去那里以太

有人可以指定进行shell调用的语法,以便我可以提供文件重定向吗?

提前致谢.

Con*_*tin 11

你必须自己将文件提供给mysql stdin.这应该做到这一点.

import subprocess
...
filename = ...
cmd = ["mysql", "-h", ip, "-u", mysqlUser, dbName]
f = open(filename)
subprocess.call(cmd, stdin=f)
Run Code Online (Sandbox Code Playgroud)


And*_*ikh 5

该符号仅在 shell 中<具有此含义(即读取文件到stdin)。在 Python 中,您应该使用以下任一种:

1)读取进程中的文件内容并将其推送到stdin子进程:

fd = open(filename,  'rb')
try:
    subprocess.call(cmd, stdin=fd)
finally:
    fd.close()
Run Code Online (Sandbox Code Playgroud)

2)通过shell读取文件内容(如您所述),但相应地重定向stdin您的进程:

# In file myprocess.py
subprocess.call(cmd, stdin=subprocess.PIPE)

# In shell command line
$ python myprocess.py < filename
Run Code Online (Sandbox Code Playgroud)