首页 > 解决方案 > 我是否正确使用系统调用/子进程调用?

问题描述

此代码在运行时失败:

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 分配数据库相当陌生。我被困住了,如果有人可以帮助我解决这个问题,那将非常有帮助。

谢谢!

标签: pythonsubprocesssystemallocationhpc

解决方案


如果可能,请传递一个包含您的命令名称及其参数的列表。

subprocess.call(["sudo", "mam-list-usagerecords",
                 "-s", str(startdate),
                 "-e", str(enddate),
                 "--format", "csv",
                 "--full"])

这避免了甚至需要知道 shell 将如何处理命令行的需要。


推荐阅读