【发布时间】:2016-12-19 21:30:14
【问题描述】:
我正在尝试从 python 脚本调用SLURM squeue。命令,
/usr/bin/squeue --Format=username,jobid,name,timeleft
在命令行中运行良好,但在 subprocess.Popen 中失败:
p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
File "/n/home00/DilithiumMatrix/.conda/envs/py35/lib/python3.5/subprocess.py", line 947, in __init__
restore_signals, start_new_session)
File "/n/home00/DilithiumMatrix/.conda/envs/py35/lib/python3.5/subprocess.py", line 1551, in _execute_child
raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: '/usr/bin/squeue --Format=username,jobid,name,timeleft'
MWE:
import subprocess
command = "/usr/bin/squeue --Format=username,jobid,name,timeleft"
p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
text = p.stdout.read()
print(text)
/usr/bin/squeue 在命令行或Popen 都可以正常工作。
它是否会失败,因为它需要一些关于正在执行squeue 命令的用户/组的信息,并且在通过 python 运行时(不知何故)丢失了?还有什么可能导致这种情况?
【问题讨论】:
-
您对
subprocess.Popen的呼叫是什么样的?它是如何失败的? -
@MarkkuK。哎呀,对不起 --- 包括 MWE 和错误消息。
-
您需要将命令作为字符串列表传递:
command = ["/usr/bin/squeue", "--Format=username,jobid,name,timeleft"] -
该死的。我尝试了
"/usr/bin/squeue --Format=username,jobid,name,timeleft"和["/usr/bin/squeue", "--Format=", "username,jobid,name,timeleft"],但没有尝试过妥协案例......你知道为什么它不能正常工作吗?如果您提交了答案,我将很乐意接受您的回答!非常感谢 -
谢谢,我提交了答案。您的第二种形式就像在命令行上调用
/usr/bin/squeue,在=之后有一个空格。
标签: python command-line subprocess jobs slurm