一千萬個為什麽

搜索

在python中嵌入bash

我正在寫一個Python腳本,我的時間已經不多了。我需要做一些我在bash中非常熟悉的事情,所以我想知道如何將一些bash行嵌入到Python腳本中。

謝謝

最佳答案

理想的方法:

def run_script(script, stdin=None):
    """Returns (stdout, stderr), raises error on non-zero return code"""
    import subprocess
    # Note: by using a list here (['bash', ...]) you avoid quoting issues, as the 
    # arguments are passed in exactly this order (spaces, quotes, and newlines won't
    # cause problems):
    proc = subprocess.Popen(['bash', '-c', script],
        stdout=subprocess.PIPE, stderr=subprocess.PIPE,
        stdin=subprocess.PIPE)
    stdout, stderr = proc.communicate()
    if proc.returncode:
        raise ScriptException(proc.returncode, stdout, stderr, script)
    return stdout, stderr

class ScriptException(Exception):
    def __init__(self, returncode, stdout, stderr, script):
        self.returncode = returncode
        self.stdout = stdout
        self.stderr = stderr
        Exception.__init__('Error in script')

您還可以為 ScriptException 添加一個不錯的 __ str __ 方法(您確定需要它來調試腳本) - 但我將其留給讀者。

如果您不使用 stdout = subprocess.PIPE 等,則腳本將直接附加到控制臺。如果您有來自ssh的密碼提示,這非常方便。因此,您可能希望添加標誌來控制是否要捕獲stdout,stderr和stdin。

轉載註明原文: 在python中嵌入bash