如何在Python脚本中执行命令?

如何在Python脚本中执行命令?,python,subprocess,Python,Subprocess,在我的Python脚本中,我尝试执行下一个代码: import subprocess subprocecss.call("xrdb -load ~/.XDefaults") 但它出现了一个错误:“没有这样的文件或目录”,尽管当我将相同的代码粘贴到终端时,它仍然有效。我还用导入操作系统尝试了os.system(…),我用“xrdb-merge~/.XDefaults”尝试了它,我尝试了从命令中删除~/,我甚至尝试了将“”更改为“”,没有办法。我做错了什么?您需要使用shell=True或添加具有

在我的Python脚本中,我尝试执行下一个代码:

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