我在solaris环境下运行python命令。我无法对它执行subprocess.call,因为它在execute_child“[Errno 2]没有这样的文件或目录”中给出了一个错误。我尝试了使用popen2 / 3/4的替代方法,但它抛出了一个错误“DeprecationWarning:popen2模块已被弃用。使用子进程模块。”由于某些限制,我不想使用os.system。有没有其他方法使这项工作? 任何帮助将不胜感激。
答案 0 :(得分:2)
你试过subprocess.popen()
吗?它很简单:
output, error = subprocess.popen(your_command, shell=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE);
replaces popen2()
,确实已弃用:
os.popen2(cmd [,mode [,bufsize]])
从2.6版开始不推荐使用:此功能已过时。使用 子进程模块。特别检查更换旧功能 子流程模块部分。
关于No such file or directory
错误,请尝试使用绝对路径。
答案 1 :(得分:0)
下面是我编写的一个python程序的代码,该程序管理Solaris 10系统上的Solaris Volume Manager(SVM)卷。它使用前面描述的相同方法,但在p.communicate()中添加。注意,在这种情况下,stderr输出被重定向到标准输出,因为在这种情况下不需要区分错误消息和正常输出。
# Constants
DATADIR="/etc/lvm"
METASTAT_CMD="/usr/sbin/metastat"
MD_CF = DATADIR + "/md.cf"
def check_svm_volume_exists():
# Check to see if any SVM volume(s) exist or not. If none exist, exit.
syscmd = " ".join([METASTAT_CMD, "-p", ">", MD_CF])
p = subprocess.Popen(syscmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
out_data, err_data = p.communicate()
if out_data == "":
return out_data
else:
print("No Solaris Volume Manager volume(s) appear to be configured. Exiting.")
sys.exit(1)