2013-06-18 71 views
1

我在我的服務器上有2個Python腳本。我想運行第二個,SendMail.py,從MainScript.py,我需要傳遞2個參數給它。如何將參數從服務器上的一個python腳本傳遞到另一個腳本?

我想打電話給send_mail功能MainScript.py

def send_mail(subject, body): 
    # call SendMail.py with and pass the subject & body arguments 

所以它將運行SendMail.py

如何在傳遞參數時運行其他腳本?有沒有可能將SendMail.py的主要功能導入MainScript.py?我如何獲取SendMail.py的參數?

+1

你不能導入'SendMail.py'? –

+0

我可以,但我認爲必須有一種方法可以在不導入的情況下執行此操作。這是最佳做法嗎?如果是這樣,我會去那。我不太清楚如何使用它。 – tempy

回答

1

使用子模塊:

import subprocess 
args = [subject, body] 
subprocess.call(['python','SendMail.py'] + args) 

SendMail.py使用sys.argv

import sys 
subject, body = sys.argv[1:] 
+1

是的,但爲什麼不在第一個地方創建拆分的*結果? '.call()'當'shell = False'時需要一個參數* list *。 –

+0

@MartijnPieters明白你的觀點,解決了這個問題。 –

+0

如何獲取'SendMail.py'中的參數? – tempy

2

可以使用subprocess模塊運行另一個python解釋; sys.executable爲您提供了一個方便的起點:

import subprocess 
import sys 

subprocess.call([sys.executable, 'SendMail.py', subject, body]) 

,但最好的做法是隻進口SendMail;確保將其結構只運行「腳本像」代碼與if __name__ == '__main__'後衛,然後從SendMail導入主「發送」功能和再利用是:

def send_mail(subject, body): 
    # main sending function 


if __name__ == '__main__': 
    # parse command line arguments into subject and body 
    send_mail(subject, body) 

然後導入SendMail和呼叫SendMail.send_mail(subject, body)

+0

如何在第一個方法中使用'SendMail.py'中的參數?以及如何在第二種方法中導入SendMail.py?謝謝 – tempy

+0

@tempy:你可以用各種方式解析命令行參數; Python附帶的'argparse'庫是一​​個好方法。 –

相關問題