2011-05-15 166 views
0

在Python腳本我叫bash腳本如下:Python調用shell腳本 - 沒有目錄?

subprocess.Popen(["./scan.sh", dir]) 

內部的劇本,還有就是,

find $1 -name "*013*.txt" > found_files.txt 

出於某種原因,從蟒蛇的dir參數被轉換成一個版本引號在bash腳本里面。打印在python產量「目錄」作爲用戶的確切路徑鍵入它:

~/Desktop/Files 

然而,找到失敗

find: '~/Desktop/Files' no such directory 

與〜/桌面/文件手動運行scan.sh作爲參數作品精細。如何引用引號......?

+0

「使用〜/ Desktop/Files手動運行scan.sh」在文件後面,按Tab(一次或兩次)。 shell爲你擴展'〜',就像在擴展它(不顯示它)之前調用'scan.sh'。 – tzot 2011-05-15 23:18:59

回答

8

沒有。發生什麼事是~沒有被解釋,因爲這是殼的工作。使用os.path.expanduser()在將路徑傳遞到subprocess之前展開路徑。

0

使用$ HOME。 '〜'不用引號或雙引號擴展。

python -c "import subprocess;subprocess.Popen(['./scan.sh', '~'])" 
python -c "import subprocess;subprocess.Popen(['./scan.sh', '$HOME'])" 

我scan.sh包含:

#!/bin/sh 
echo =$1= 

第一個打印=~=,第二=/Users/jomo=

+1

使用'$ HOME'將無濟於事,因爲它也是* shell擴展環境變量的工作。 – 2011-05-15 19:31:55

+1

但$ HOME用雙引號擴展。 (不是單個) – jm666 2011-05-15 19:32:54

+1

考慮通過'subprocess'傳遞給命令的所有內容都被包含在單引號中。 – 2011-05-15 19:34:00