Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
popen和mysql的python问题_Python_Mysql_Popen - Fatal编程技术网

popen和mysql的python问题

popen和mysql的python问题,python,mysql,popen,Python,Mysql,Popen,我是Python新手,已经多年没有使用Linux了,所以我不知道我在哪里纠结。我正在尝试使用Popen在Ubuntu上运行MySQL中的sql文件 以下是相关代码: command = ['mysql', '-uUSER', '-pPWD','-h192.168.1.132', '--database=dbName', '<', './1477597236_foo.sql' ] print("command is: "+subprocess.list2cmdline(command))

我是Python新手,已经多年没有使用Linux了,所以我不知道我在哪里纠结。我正在尝试使用Popen在Ubuntu上运行MySQL中的sql文件

以下是相关代码:

command = ['mysql', '-uUSER', '-pPWD','-h192.168.1.132',  '--database=dbName', '<', './1477597236_foo.sql' ]
print("command is: "+subprocess.list2cmdline(command))

proc = subprocess.Popen(
    command, stderr=subprocess.PIPE, stdout=subprocess.PIPE, cwd='.'
)

命令=['mysql'、'-uUSER'、'-pPWD'、'-h192.168.1.132'、'-database=dbName'、“因此您需要将
shell=True
添加到您的
Popen
调用中。
当命令行中存在重定向或管道或内置命令时,需要
shell=True
。然而,在类似这样的简单情况下,
shell=True
是过火了。T这里有一种更简洁的方法,可以避免对输入文件进行更好的控制

  • 如果输入文件不存在,则在到达子流程之前会出现异常,这更容易处理
  • 进程在没有外壳的情况下运行:更好的可移植性和性能
守则:

command = ['mysql', '-uUSER', '-pPWD','-h192.168.1.132',  '--database=dbName' ]

with open('./1477597236_foo.sql') as input_file:
    proc = subprocess.Popen(
        command, stdin = input_file, stderr=subprocess.PIPE, stdout=subprocess.PIPE )
    output,error = proc.communicate()

(我添加了下一行,应该是
communicate
调用:由于stdout和stderr都被重定向,这是避免两个输出流之间死锁的唯一简单方法)

最后一个选项是根本不要使用
子流程:典型的me:在低级别上回答,忽略全局。我的回答仍然涵盖了命令、sql或其他需要输入重定向的情况。这一点很好。
command = ['mysql', '-uUSER', '-pPWD','-h192.168.1.132',  '--database=dbName' ]

with open('./1477597236_foo.sql') as input_file:
    proc = subprocess.Popen(
        command, stdin = input_file, stderr=subprocess.PIPE, stdout=subprocess.PIPE )
    output,error = proc.communicate()