在没有 shell=True 的情况下通过 python 的 subprocess.Popen() 提交 LSF 脚本
Submitting an LSF script via python's subprocess.Popen() without shell=True
预先警告,问题可能更多是关于缺乏对 bsub
命令和登录 shell 的理解而不是 python 的 Popen()
。
我正在尝试使用 subprocess.Popen()
在 python 脚本中提交 LSF 脚本
pipe = subprocess.Popen(shlex.split("bsub < script.lsf"),
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
似乎子进程已正确启动并执行了命令,但我从读取 "Empty job. Job not submitted."
的 bsub 命令中得到 stderr
错误
我担心它与启动登录的子进程有关-shell,所以我尝试在 Popen 命令中使用 shell=True
来缓解这种情况。
pipe = subprocess.Popen("bsub < script.lsf", shell=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
这按预期成功提交了作业。所以我的问题是如何在不使用 shell=True
的情况下提交这份工作?
我试过使用一些 bsub options 例如
pipe = subprocess.Popen(shlex.split("bsub -L /bin/sh < script.lsf"),
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
返回相同的 "Empty job. Job not submitted." 错误。我觉得这接近我要找的东西,但我不完全理解 "The name of the login shell (must specify an absolute path" 到底是什么。也许它不是 /bin/sh
在我使用的系统上。有没有办法打印这条路径?
<
和 >
不是您命令的参数(在本例中为 bsub
),而是对 shell 关于 stdin 或 stdout(分别) 应该在该命令启动之前被引导。
因此,适当的替代方法是使用 Popen
的单独参数指定此重定向:
pipe = subprocess.Popen(['bsub', '-L', '/bin/sh'],
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
stdin=open('script.lsf', 'r'))
预先警告,问题可能更多是关于缺乏对 bsub
命令和登录 shell 的理解而不是 python 的 Popen()
。
我正在尝试使用 subprocess.Popen()
pipe = subprocess.Popen(shlex.split("bsub < script.lsf"),
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
似乎子进程已正确启动并执行了命令,但我从读取 "Empty job. Job not submitted."
的 bsub 命令中得到stderr
错误
我担心它与启动登录的子进程有关-shell,所以我尝试在 Popen 命令中使用 shell=True
来缓解这种情况。
pipe = subprocess.Popen("bsub < script.lsf", shell=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
这按预期成功提交了作业。所以我的问题是如何在不使用 shell=True
的情况下提交这份工作?
我试过使用一些 bsub options 例如
pipe = subprocess.Popen(shlex.split("bsub -L /bin/sh < script.lsf"),
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
返回相同的 "Empty job. Job not submitted." 错误。我觉得这接近我要找的东西,但我不完全理解 "The name of the login shell (must specify an absolute path" 到底是什么。也许它不是 /bin/sh
在我使用的系统上。有没有办法打印这条路径?
<
和 >
不是您命令的参数(在本例中为 bsub
),而是对 shell 关于 stdin 或 stdout(分别) 应该在该命令启动之前被引导。
因此,适当的替代方法是使用 Popen
的单独参数指定此重定向:
pipe = subprocess.Popen(['bsub', '-L', '/bin/sh'],
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
stdin=open('script.lsf', 'r'))