如何通过Python subprocess执行Altair Accelerator(NC)的nc run命令
错误原因
subprocess.Popen传入列表形式的命令参数时,要求可执行文件、每个参数都作为列表的独立元素,你原代码将nc run作为第一个列表元素,系统会尝试查找名为nc run的可执行文件,这是触发No such file or directory错误的直接原因。- 列表第二个参数开头携带多余空格,也会导致参数解析异常。
修复代码
优先推荐列表拆分写法,无需启用shell解析,安全性更高:
import subprocess with open('test.txt', 'w') as f: cmd = [ 'nc', 'run', '-q', 'vnc01', 'run', '-C', 'TEST', '-wl', '-I', '-r+', 'CORES/32', '-r+', 'RAM/150000', '--', '/bin/tcsh' ] # stderr=subprocess.STDOUT 表示将错误输出也写入test.txt,方便排查问题,不需要可删除 process = subprocess.Popen(cmd, stdout=f, stderr=subprocess.STDOUT) # 等待命令执行完成,可按需获取返回码 process.wait()
如果希望和原shell命令写法完全一致,也可以使用字符串+shell=True的写法,注意如果命令包含外部不可信输入时不要用该写法,存在shell注入风险:
import subprocess with open('test.txt', 'w') as f: cmd = 'nc run -q vnc01 run -C TEST -wl -I -r+ CORES/32 -r+ RAM/150000 -- /bin/tcsh' process = subprocess.Popen(cmd, shell=True, stdout=f, stderr=subprocess.STDOUT) process.wait()
补充说明
如果运行后仍然提示找不到nc命令,可在shell中执行which nc获取nc的绝对路径,替换代码中cmd列表的第一个元素即可。
内容的提问来源于stack exchange,提问作者igorbogu
相关产品推荐
相关产品推荐

