预先警告,问题可能更多的是对bsub
命令和登录shell的理解不足,而不是python的Popen()
。在
我试图在python脚本中使用subprocess.Popen()
提交一个LSF脚本
pipe = subprocess.Popen(shlex.split("bsub < script.lsf"),
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
似乎一个子进程已经正确启动并执行了该命令,但是我从bsub命令中得到了一个错误stderr
,它显示“Empty job”。作业未提交。“
我担心它与启动登录shell的子进程有关,所以我尝试在Popen命令中使用shell=True
来缓解这种情况。在
这将按预期成功提交作业。所以我的问题是如何在不使用shell=True
的情况下提交此作业?在
我试过使用一些bsub options,比如
pipe = subprocess.Popen(shlex.split("bsub -L /bin/sh < script.lsf"),
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
同样的“空工作”。作业未提交。”返回错误。我觉得这很接近我想要的,但是我不完全理解“登录shell的名称(必须指定一个绝对路径)”到底是什么。可能我正在使用的系统上没有/bin/sh
。有办法打印这个路径吗?在
<
和>
不是命令的参数(在本例中是bsub
),而是对shell的指示,说明在该命令启动之前stdin或stdout(分别)应指向何处。在因此,适当的替代方法是使用
Popen
的单独参数指定此重定向:相关问题 更多 >
编程相关推荐