python - 我是否正确使用系统调用/子进程调用?
问题描述
此代码在运行时失败:
import datetime
import subprocess
startdate = datetime.datetime(2010,4,9)
for i in range(1):
startdate += datetime.timedelta(days=1)
enddate = datetime.datetime(2010,4,10)
for i in range(1):
enddate += datetime.timedelta(days=1)
subprocess.call("sudo mam-list-usagerecords -s \"" + str(startdate) + "\" -e \"" + str(enddate) + " --format csv --full")
程序运行时出现以下错误:
File "QuestCommand.py", line 12, in <module>
subprocess.call("sudo mam-list-usagerecords -s \"" + str(startdate) + "\" -e \"" + str(enddate) + " --format csv --full")
File "/usr/lib64/python2.7/subprocess.py", line 524, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__
errread, errwrite)
File "/usr/lib64/python2.7/subprocess.py", line 1327, in _execute_child
raise child_exception
我已经用其他方式多次运行此代码,更改引号等。我对系统调用和使用 HPC 分配数据库相当陌生。我被困住了,如果有人可以帮助我解决这个问题,那将非常有帮助。
谢谢!
解决方案
如果可能,请传递一个包含您的命令名称及其参数的列表。
subprocess.call(["sudo", "mam-list-usagerecords",
"-s", str(startdate),
"-e", str(enddate),
"--format", "csv",
"--full"])
这避免了甚至需要知道 shell 将如何处理命令行的需要。
推荐阅读
- c# - 抛出错误的异常
- apache-camel - 自定义 Camel 组件 - 在 FTP 使用者中调用 FTP
- swift - 当用户跳入视图时,如何将我的第一个按钮设置为最初选择的?
- arrays - 查找字符串并返回与集合匹配的第一个字符串
- r - 如何理解r数据框中的方括号和逗号
- php - 限制文件的公共访问
- reactjs - 使用 Context API 在 React 中处理表单
- java - 删除文件传递的 JAVA 中的停用词
- unit-testing - 如何在单元测试中等待suspendCoroutine?
- ansible - 如何在ansible的for循环中使用主机变量时访问变量值?