2011-05-15 164 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