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)
该符号仅在 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)