2014-01-06 33 views
0

我需要使用python執行shell腳本。 shell程序的輸出是一個文本文件。腳本沒有輸入。幫我解決這個問題。編寫文件的shell程序的subprocess.call()

def invokescript(shfile): 
    s=subprocess.Popen(["./Script1.sh"],stderr=subprocess.PIPE,stdin=subprocess.PIPE); 
    return; 

invokescript("Script1.sh"); 

關於使用上面的代碼,我收到以下錯誤。

Traceback (most recent call last): 
    File "./test4.py", line 12, in <module> 
    invokescript("Script1.sh"); 
    File "./test4.py", line 8, in invokescript 
    s=subprocess.Popen(["./Script1.sh"],stderr=subprocess.PIPE,stdin=subprocess.PIPE); 
    File "/usr/lib/python2.7/subprocess.py", line 679, in __init__ 
    errread, errwrite) 
    File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child 
    raise child_exception 
OSError: [Errno 8] Exec format error 

在此先感謝...

+0

可能會複製:http://stackoverflow.com/questions/4834483/is-this-the-right-way-to-run-a-shell-script-inside-python – atupal

+1

在Python中不需要分號 – codeape

+0

ITYM 's = subprocess.Popen([shfile],...)'。否則,你將不需要該參數。 – glglgl

回答

0

我用os.system()來調用shell腳本。這做我所期望的。確保你已經在你的Python代碼中導入了os模塊。

invokescript("Script1.sh") // Calling Function 

function invokescript(shfile): // Function Defenition 
    os.system("/root/Saranya/Script1.sh") 
    return; 

下也可執行:

invokescript("Script1.sh") // Calling Function 

function invokescript(shfile): // Function Defenition 
    os.system(shfile) 
    return; 

感謝您立即作出反應傢伙。

0

試試這個:

import shlex 

def invokescript(shfile): 
    return subprocess.Popen(
     shlex.split(shfile), 
     stderr=subprocess.PIPE, 
     stdin=subprocess.PIPE 
    ) 

invokescript("Script1.sh"); 

並添加#!/usr/bin/env bash來,當然你的bash文件。

+0

我認爲shebang是這裏的解決方案。 'shlex.split()'調用的要點是什麼?沒有什麼可以在這裏分割... – glglgl

+0

好吧,我編輯了代碼。我添加了「shlex.split」,因爲現在功能更一般。 – swietyy

+0

我仍然面臨着同樣的錯誤。感謝您的答覆 – Lemon