python,subprocess.call([";rm";,";inv.mt0";],shell=True)不工作

python,subprocess.call([";rm";,";inv.mt0";],shell=True)不工作,python,subprocess,Python,Subprocess,朋友们 我有一个简单的脚本 import subprocess subprocess.call(["./run_xf"]) old=open('./inv.mt0','r') lines=old.readlines() lines=lines[3:] new=open('./inv.mt1','w') new.writelines(lines) old.close() new.close() subprocess.call(["rm", "inv.mt0"], shell=Tr

朋友们

我有一个简单的脚本

import subprocess

subprocess.call(["./run_xf"])

old=open('./inv.mt0','r')

lines=old.readlines()

lines=lines[3:]

new=open('./inv.mt1','w')

new.writelines(lines)

old.close()

new.close()

subprocess.call(["rm", "inv.mt0"], shell=True)
除最后一个代码外,所有代码都有效

运行xf运行hspice并生成inv.mt0。然后我将inv.mt0的一部分复制到inv.mt1。然后我想删除inv.mt0。但这不起作用

对于这个特定的示例,它抱怨rm找不到操作数。但是如果我把它们写在一起,它也不会删除文件

谢谢


xf

如果使用的是
shell=True
,则必须向
子流程传递字符串。调用
,而不是列表。有关更多详细信息,请参阅


但是,由于安全问题,不建议使用
shell=True
调用子流程。您应该删除
shell=True
并保留列表样式的参数。

“找不到操作数”:您是否做了任何事情来验证inv.mt0是否存在?是的,这可能是问题所在。这里不同命令之间的顺序如何。它是线性的吗?运行xf生成inv.mt0。它是线性的。为什么验证文件是否存在如此困难?是的,我提到我尝试了subprocess.call(“rm inv.mt0”,shell=True),但它不起作用。您也可以尝试os.remove(“inv.mt0”)。请添加os.listdir(“.”)并提供输出。你看到“inv.mt0”文件了吗?如果没有,它就没有在那个目录中创建。谢谢你的评论,gab。但我解决了与命令本身不太相关的问题。相反,在run\u xf中,以前的hspice inv.sp&>log现在的hspice inv.sp>log没有从hspice向监视器输出内容,它似乎在那里工作,print os.listdir()的输出是['run\u xf','maxDelay.py','inv.mt0','scope.log','inv.sp','inv.tr0',make','inv inv.mt1',inv.ic0',inv pa0',inv.st0',hehe',inv.tr1',log']