将bash输出传递给python脚本时出现问题

时间:2009-08-26 08:12:17

标签: python bash

我对编程很新,我在互联网上搜索了一种将bash输出传递给Python脚本的方法。

我在bash中想出了这个。

XAS_SVN=`svn info` 
ssh hudson@test "python/runtests.py $XAS_SVN"

这是在python中。

import sys
print sys.argv[1]

当我echo $SVN_INFO时,我得到了结果。

  

路径:。网址:   // SVN / RND项目/测试/蟒蛇   存储库根目录:   // svn / rnd-projects存储库   UUID:   d07d5450-0a36-4e07-90d2-9411ff75afe9   版本:140节点种类:目录   时间表:正常上次更改作者:   Roy van der Valk Last Changed Rev:140   最后更改日期:2009-06-09 14:13:29   + 0200(2009年6月9日星期二)

然而,python脚本只打印以下内容。

  

路径:

为什么会这样,我该如何解决这个问题?我的$ SVN_INFO变量不是字符串类型?

我知道子进程模块和Popen函数,但我不认为这是一个解决方案,因为python脚本在另一台服务器上运行。

2 个答案:

答案 0 :(得分:1)

由于变量中有空格,因此需要转义它们或读取脚本中的所有参数:

print ' '.join(sys.argv[1:])

但是使用stdin / stdout进行通信可能会更好,特别是如果某些字符容易被输出中的shell解释(例如“$”)。 在python脚本中执行:

for l in sys.stdin:
     sys.stdout.write(l)

并在shell中:

svn info | ssh hudson@test python/runtests.py

答案 1 :(得分:0)

是的,您需要在python / runtest.py中输入引号,否则argv [1]只能将其输入到第一个空格。像这样:

ssh hudson@test "python/runtest.py \"$XAS_SVN\""