如何在Python脚本中执行命令?
在我的Python脚本中,我尝试执行下一个代码:如何在Python脚本中执行命令?,python,subprocess,Python,Subprocess,在我的Python脚本中,我尝试执行下一个代码: import subprocess subprocecss.call("xrdb -load ~/.XDefaults") 但它出现了一个错误:“没有这样的文件或目录”,尽管当我将相同的代码粘贴到终端时,它仍然有效。我还用导入操作系统尝试了os.system(…),我用“xrdb-merge~/.XDefaults”尝试了它,我尝试了从命令中删除~/,我甚至尝试了将“”更改为“”,没有办法。我做错了什么?您需要使用shell=True或添加具有
import subprocess
subprocecss.call("xrdb -load ~/.XDefaults")
但它出现了一个错误:“没有这样的文件或目录”,尽管当我将相同的代码粘贴到终端时,它仍然有效。我还用导入操作系统尝试了os.system(…),我用“xrdb-merge~/.XDefaults”尝试了它,我尝试了从命令中删除~/,我甚至尝试了将“”更改为“”,没有办法。我做错了什么?您需要使用
shell=True
或添加具有完整路径的文件:
subprocecss.call("xrdb -load ~/.XDefaults",shell=True)
发件人:
在shell=True的Unix上,shell默认为/bin/sh。如果args是字符串,则该字符串指定要通过shell执行的命令
在shell=True的Windows上,COMSPEC环境变量指定默认shell。在Windows上唯一需要指定shell=True的时间是希望执行的命令内置到shell中时(例如dir或copy)
请注意,由于默认情况下,
subprocess.call
不会继承您的环境,~的值未定义,因此您需要传递shell=True
标志(潜在危险),或者通过键入或使用os.path.expanduser('~/.XDefaults')
来获取~/.XDefaults
的绝对路径,(正如falstru所建议的)。你说的path.abspath
是什么意思?如果你指的是os.path.abspath
,它不会扩展~
。在我的系统上:>>os.path.abspath('~')/home/gadget/~'
那么,使用它的函数是错误的,不是吗?(该函数取决于当前工作目录。~
本身未展开。)您可能需要使用:os.path.expanduser(“~/.XDefaults”)
Better将添加到回答中。它很有效!非常感谢!@banan olivka不客气!我很抱歉不在顶部,但也许您可以提示我一些消息框,我可以在其中设置前景和背景parameters@banan-olivka..没关系。如果您愿意,有更好的选择,如subprocess.popen()
I suppese,subprocess.popen(message='…',title='…',foreground='#000000',background='#ffffff'),但它会引发错误:'uu init_uu()获得了意外的关键字参数'foreground'',有很多方法可以在不使用shell=True的情况下执行您想要的操作,我也会使用check_call而不是call