从python启动作业,将输出重定向到文件

从python启动作业,将输出重定向到文件,python,redirect,Python,Redirect,我有一个脚本,update\u file,我通常这样运行: sudo更新_文件(文件)>。/logs/(文件)& 我想知道,从Python脚本中调用这个脚本,仍然让它将输出从update\u file重定向到一个文件,并将其创建为系统作业,这可能是什么样的语法 编辑:我应该注意,我在多个(文件)上运行这个函数,所以我想将其作为变量传递 import subprocess subprocess.call("sudo update_file(file)",stdout=open("logs/(fi

我有一个脚本,
update\u file
,我通常这样运行:

sudo更新_文件(文件)>。/logs/(文件)&


我想知道,从Python脚本中调用这个脚本,仍然让它将输出从
update\u file
重定向到一个文件,并将其创建为系统作业,这可能是什么样的语法

编辑:我应该注意,我在多个
(文件)
上运行这个函数,所以我想将其作为变量传递

import subprocess

subprocess.call("sudo update_file(file)",stdout=open("logs/(file)","w"))
也许吧


也许吧?

首先,
子流程
模块是如何从Python执行程序的。文档中的部分向您展示了如何将典型的shell功能转换为Python

因为您正在使用
&
作为任务的后台,所以您需要创建一个
Popen
,稍后再进行作业处理。因此:

jobs = []

# ... each time you want to run it on a file ...

jobs.append(subprocess.Popen(['sudo', 'update_file', file],
                             stdout=open(os.path.join('logs', file), 'w'))

# ... at exit time ...

for job in jobs:
    job.wait()
    job.stdout.close()

首先,
子流程
模块是如何从Python执行程序的。文档中的部分向您展示了如何将典型的shell功能转换为Python

因为您正在使用
&
作为任务的后台,所以您需要创建一个
Popen
,稍后再进行作业处理。因此:

jobs = []

# ... each time you want to run it on a file ...

jobs.append(subprocess.Popen(['sudo', 'update_file', file],
                             stdout=open(os.path.join('logs', file), 'w'))

# ... at exit time ...

for job in jobs:
    job.wait()
    job.stdout.close()

“是否将其创建为系统作业”,您的意思是让它在Python脚本结束后继续运行?“是否将其创建为系统作业”,您的意思是让它在Python脚本结束后继续运行?可能是他们正在寻找的?他希望
(文件)
成为一个变量。另外,
&
表示他不想等待它完成,因此
调用
在这里不是正确的做法。您已经删除了参数之间的一个空格。你真的想在POSIX平台上使用参数列表而不是字符串;否则,你必须自己处理,例如,转义
文件
变量。是的,他在我回答后编辑了它,我想这更清楚了。。。不管怎样,你的答案是正确的:)可能是他们想要的?他希望
(文件)
成为一个变量。另外,
&
表示他不想等待它完成,因此
调用
在这里不是正确的做法。您已经删除了参数之间的一个空格。你真的想在POSIX平台上使用参数列表而不是字符串;否则,你必须自己处理,例如,转义
文件
变量。是的,他在我回答后编辑了它,我想这更清楚了。。。无论如何,你的答案是正确的:)