如何在python中的子进程中添加追加符号

如何在python中的子进程中添加追加符号,python,scheduled-tasks,subprocess,Python,Scheduled Tasks,Subprocess,我有以下代码,它运行带有参数的命令 subprocess.call(["schtasks.exe", "/Query","/V","/FO","csv",">>", r"D:/temp/fo3.csv"]) 但是,我对参数的>部分有问题,命令似乎不喜欢它,它给出了以下消息 ERROR Invalid argument /option - >> 因此,我的问题是如何让>参数工作?当您以这样的列表形式传递参数时,子流程会将每个参数传递给程序。可能发生的情况是,您的程序(s

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

subprocess.call(["schtasks.exe", "/Query","/V","/FO","csv",">>", r"D:/temp/fo3.csv"])
但是,我对参数的
>
部分有问题,命令似乎不喜欢它,它给出了以下消息

ERROR Invalid argument /option - >>

因此,我的问题是如何让
>
参数工作?

当您以这样的列表形式传递参数时,子流程会将每个参数传递给程序。可能发生的情况是,您的程序(
schtasks.exe
)正在看到参数
>
,它不知道如何处理该参数。当您在shell中运行此命令时,
被shell解释为重定向,因此您的程序永远不会看到它

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

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

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

当您以这样的列表形式传递参数时,子流程会将每个参数传递给程序。可能发生的情况是,您的程序(
schtasks.exe
)正在看到参数
>
,它不知道如何处理该参数。当您在shell中运行此命令时,
被shell解释为重定向,因此您的程序永远不会看到它

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

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

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

输出重定向(即
>
)是一种shell功能,如果您直接调用该程序,它将无法工作。在调用中使用
shell=True

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

谢谢,我已经尝试了您的示例,但在联机子进程.call([“schtasks.exe”、“/Query”、“/V”、“/FO”、“csv”]、stdout=f)中,我得到了错误类型错误:需要整数。我试图在第1行添加一个整数,但仍然出现错误。@HalilSiddique——真的吗?文档说明了以下内容:“有效值为管道、现有文件描述符(正整数)、现有文件对象和无。”--我想您可以尝试传递
f.fileno()
,但这似乎不是必需的。谢谢,我已经尝试了您的示例,但是在线子流程调用([“schtasks.exe”、“/Query”、“/V”,“/FO”,“csv”],stdout=f)我得到错误类型错误:需要一个整数。我试图在第1行添加一个整数,但仍然出现错误。@HalilSiddique——真的吗?文档说明了以下内容:“有效值为管道、现有文件描述符(正整数)、现有文件对象和无。”--我想您可以尝试传递
f.fileno()
,但这似乎不是必需的。