【问题标题】:How to add an append symbol in a subprocess in python如何在python的子进程中添加附加符号
【发布时间】:2012-08-29 15:31:35
【问题描述】:

我有以下代码,它运行带有参数的命令

subprocess.call(["schtasks.exe", "/Query","/V","/FO","csv",">>", r"D:/temp/fo3.csv"])

但是我对参数的>> 部分有疑问,该命令似乎不喜欢它,它给出以下消息

ERROR Invalid argument /option - >>

所以我的问题是如何让>> 参数起作用?

【问题讨论】:

    标签: python scheduled-tasks subprocess


    【解决方案1】:

    当您将参数作为这样的列表传递时,子进程将每个参数传递给程序。可能发生的情况是您的程序 (schtasks.exe) 看到了参数 >>,但它不知道如何处理它。当你在 shell 中运行它时,>> 被 shell 解释为重定向,所以你的程序永远看不到它。

    您有 2 个选项,将参数作为字符串传递并使用 shell = True。如果您接受可以修改您传递给子进程的字符串的用户输入,则不建议这样做,因为这会导致您的程序存在安全风险。

    您的第二个选项是将打开的文件对象传递给stdout,例如

    f = open(r"D:/temp/fo3.csv",'a')
    subprocess.call(["schtasks.exe", "/Query","/V","/FO","csv"], stdout = f)
    

    【讨论】:

    • 谢谢,我已经尝试过您的示例,但在线 subprocess.call(["schtasks.exe", "/Query","/V","/FO","csv"], stdout = f) 我收到错误 TypeError: an integer is required。我尝试在第一行添加一个整数,但仍然出现错误。
    • @HalilSiddique -- 真的吗?文档指出以下“有效值为 PIPE、现有文件描述符(正整数)、现有文件对象和无。” -- 我想你可以尝试传递f.fileno(),但这似乎没有必要。
    【解决方案2】:

    输出重定向(>>)是一个 shell 功能,如果您直接调用该程序,它将不起作用。在通话中使用shell=True

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-28
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多