sh转换为py

时间:2013-03-06 16:20:13

标签: python shell

我正在将shell脚本转换为python,我遇到了问题。当前脚本使用上次运行命令的结果,如此。

if [ $? -eq 0 ];
then
    testPassed=$TRUE
else
    testPassed=$FALSE
fi

我有if语句转换而不确定$?部分。因为我是python的新手,我想知道是否有类似的方法来做到这一点?

2 个答案:

答案 0 :(得分:3)

您应该查看subprocess模块。有一种check_call方法可以查看退出代码(这是一种方法,还有其他方法)。如手册所述:

  

使用参数运行命令。等待命令完成。如果   返回代码为零然后返回,否则引发CalledProcessError。   CalledProcessError对象将具有返回码   returncode属性

这方面的一个例子是:

import subprocess

command=["ls", "-l"]

try:
  exit_code=subprocess.check_call(command)
  # Do something for successful execution here
  print("Program run")
except subprocess.CalledProcessError as e:
  print "Program exited with exit code", e.returncode
  # Do something for error here

这也将包括输出,您可以将其重定向到文件或抑制如此:

import subprocess
import os

command=["ls", "-l"]

try:
  exit_code=subprocess.check_call(command, stdout=open(os.devnull, "w"))
  # Do something for successful execution here
  print("Program run")
except subprocess.CalledProcessError as e:
  print "Program exited with exit code", e.returncode
  # Do something for error here

以下是使用非零退出代码的调用示例:

import subprocess
import os

command=["grep", "mystring", "/home/cwgem/testdir/test.txt"]

try:
  exit_code=subprocess.check_call(command, stdout=open(os.devnull, "w"))
  # Do something for successful execution here
  print("Program run")
except subprocess.CalledProcessError as e:
  print "Program exited with exit code", e.returncode
  # Do something for error here

输出:

$ python process_exitcode_test.py
Program exited with exit code 1

作为您可以如上处理的例外捕获的。请注意,这不会处理拒绝访问或找不到文件等异常。您需要自己处理它们。

答案 1 :(得分:1)

您可能需要使用sh module。它使Python中的shell脚本更加愉快:

import sh
try:
    output = sh.ls('/some/nen-existant/folder')
    testPassed = True
except ErrorReturnCode:
    testPassed = False