我想知道如何从python内部执行复杂的外部命令?在
它在linux bash命令行中运行良好:
$mysqldump--单事务-u myusername-pmypassword mydb mytable>;我的表.sql在
但它在python代码中不起作用:
subprocess.call(['mysqldump''--单事务''-u myusername''-pmypasword''mydb''mytable''>;''我的表.sql'])
我的python代码有什么问题?在
或者我必须使用操作系统() ?? 在
请告诉我如何在python代码中工作,谢谢。在
看起来是语法错误
缺少
'-u' 'myusername'
引号分隔符。在另外,
subprocess.run
替换了版本>;=3.5中的subprocess.call
。检查python subprocess.call API deprecation 这应该对你有用。在下面是从python中执行复杂外部命令的示例:
https://github.com/yokawasa/azure-shell
azureshell是一个itreactiveazurecli2.0命令行接口,它在内部是us子进程
这里的一个外部命令是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中这样做的方法是:
subprocess.call
的stdout
参数允许您将子进程的输出定向到任何您喜欢的地方,就像>
shell操作符一样。在相关问题 更多 >
编程相关推荐