如何从python内部执行复杂的外部命令?

2024-10-02 00:33:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道如何从python内部执行复杂的外部命令?在

它在linux bash命令行中运行良好:
$mysqldump--单事务-u myusername-pmypassword mydb mytable>;我的表.sql在

但它在python代码中不起作用:
subprocess.call(['mysqldump''--单事务''-u myusername''-pmypasword''mydb''mytable''>;''我的表.sql'])

我的python代码有什么问题?在

或者我必须使用操作系统() ?? 在

请告诉我如何在python代码中工作,谢谢。在


Tags: 代码命令行gt外部命令bashsqllinuxmytable
3条回答

看起来是语法错误

subprocess.call(['mysqldump' ' single-transaction' '-u' 'myusername' '-pmypasword' 'mydb' 'mytable' '>' 'mytable.sql'])

缺少'-u' 'myusername'引号分隔符。在

另外,subprocess.run替换了版本>;=3.5中的subprocess.call。检查python subprocess.call API deprecation 这应该对你有用。在

下面是从python中执行复杂外部命令的示例:

https://github.com/yokawasa/azure-shell

azureshell是一个itreactiveazurecli2.0命令行接口,它在内部是us子进程

import subprocess
full_cmd = "external command"
p = subprocess.Popen(full_cmd, shell=True, env=self._env)
p.communicate()

这里的一个外部命令是az command(azurecli2.0),它有很多命令选项和参数,因此可能非常复杂。因此,azureshell支持自动完成azurecli的命令选项和参数,这有助于用户节省检查azurecli命令引用或键入“az-h”的时间。为了实现自动完成功能,它利用了python提示工具包

https://github.com/jonathanslenders/python-prompt-toolkit

希望能有所帮助

问题是>不是程序的命令行参数。>,在这个上下文中,实际上是一个shell输出重定向操作符。它由shell本身处理,而不是由mysqldump程序处理。在

Python的subprocess对shell一无所知,因此它无法理解诸如>之类的shell操作符。它只是试图将>mytable.sql作为参数给mysqldump,而{}也无法理解,从而导致错误。在

您需要做的是设置子流程以重定向其输出。在Python中这样做的方法是:

with open('mytable.sql', 'w') as f:
  subprocess.call(['mysqldump',
                   ' single-transaction', 
                   '-u',
                   'myusername',
                   '-pmypasword', 
                   'mydb',
                   'mytable'], stdout=f)

subprocess.callstdout参数允许您将子进程的输出定向到任何您喜欢的地方,就像>shell操作符一样。在

相关问题 更多 >

    热门问题