擅长:python、mysql、java
<p>您需要引用密码来保护shell元字符(例如<code>&</code>)不被shell特别对待,例如:</p>
<pre><code>cmd = "mysqldump -h {} -u {} -p'{}' {} > dump_{}_{}.sql".format(
hostname, mysql_user, mysql_pw, db, hostname, timestamp)
subprocess.run(cmd, shell=True, check=True)
</code></pre>
<p>但是,如果密码本身可以包含引号,这将不起作用。更好的选择是将<em>参数列表</em>传递给<code>subprocess</code>,然后自己进行重定向:</p>
<pre><code>args = ["mysqldump", "-h", hostname, "-u", mysql_user, "-p{}".format(mysql_pw), db]
outfile = "dump_{}_{}.sql".format(hostname, timestamp)
with open(outfile, "w") as f:
subprocess.run(args, check=True, stdout=f)
</code></pre>