2013-03-14 214 views
0

我很喜歡腳本編程,我在做python和wxpython的小項目,它自動化。現在我在從python發送變量到shell腳本時遇到問題。 我必須連接ftp,然後下載一個用BASH寫的文件(第一個腳本)。該bash腳本調用另一個也在ftp服務器中的bash腳本(第二腳本)。但是2腳本名稱在第一個腳本中沒有硬編碼。所以我必須從我的python腳本發送那個「script name」,這是我現在無法做到的。 所以我需要你的幫助來解決我的問題,已通過谷歌,但無法找到任何東西。從python傳遞變量到shell腳本

在此先感謝。

我已經試過直接運行這個,但它仍然不需要第二個參數,所以我已經通過腳本一次。發現,

當$ 2 $ 3 $ 7月1日腳本中已經配置(這些都是建於myproject.sh)

請幫我解決這個問題..

+0

你怎麼樣從python運行你的bash腳本?你在使用system()嗎? – 2013-03-14 06:28:03

+0

我正在使用子流程 – biz 2013-03-14 06:32:22

+0

迄今爲止的答案非常好。但是你也可以在第一個腳本中添加一個命令行參數。然後第二個bash腳本的名字在你的bash腳本中只有$ 1(假設你還沒有任何其他的命令行參數) – 2013-03-14 06:33:57

回答

0

您可以使用命令行參數。由於您使用的子進程調用第一個bash腳本,你可以修改它看起來像這樣:

subprocess.call(["bashScript1Name", "bashScript2Name"]) 

然後在bashScript1Name第二個腳本的名稱將是在變量$ 1

+0

bashScript2Name用戶應該輸入我無法爲了安全目的而硬編碼它:( – biz 2013-03-14 06:41:17

+0

那麼在那個例子中用戶仍然可以用python輸入它,那麼你可以用變量運行該命令不幸的是,如果你正在尋找安全性的話,我的例子仍然不起作用,第二個bash腳本的名字將會在第一個腳本運行時使用ps(或者其他方法)完成了一個知道自己在做什麼並且可以是root用戶的用戶)據我所知,沒有簡單的方法可以將隱藏信息發送到bash腳本。 – 2013-03-14 06:47:41

+0

@ Memento Mori我們可以讓bash腳本從python? – biz 2013-03-14 06:50:14

0

最快和最簡單的方法是讓你的Python腳本創建一個使用bash語法設置變量名的文件,然後讓你的第一個bash腳本獲取它。採購它將基本上設置該變量。

所以在Python中,要將該文件保存在某個輸出:

name_of_script="/path/to/second/script.sh" 

with open("/my/path/scriptnamevar.sh", "w") as f: 
    #Output to bash-recognized variable setting syntax 
    f.write("SCRIPT_NAME={}".format(name_of_script)) 

然後在你的第一個腳本,你只需要源scriptnamevar.sh(或任何你決定將它命名)。

source /my/path/scriptnamevar.sh 

# This should output whatever name_of_script was in python 
echo $SCRIPT_NAME 
+0

@ jordan我不明白你說了什麼,可以請你解釋或者有任何有用的鏈接? – biz 2013-03-14 06:33:56

+0

@ jordan @nd腳本是用戶應該輸入,所以我在GUI中使用TextCtrl,所以它從GUI中獲得價值。 – biz 2013-03-14 06:35:31

+0

@ jordan由於安全原因我無法對其進行硬編碼 – biz 2013-03-14 06:37:22

相關問題