2009-08-26 43 views
1

我对编程相当陌生,并且搜索了互联网以将bash输出传递给Python脚本。将bash输出传递给python脚本的问题

我想出了这个在bash中。

XAS_SVN=`svn info` 
ssh [email protected] "python/runtests.py $XAS_SVN" 

而这在python中。

import sys 
print sys.argv[1] 

当我I echo $SVN_INFO我得到结果。

路径:。网址: // SVN/RND项目/测试/蟒蛇 库根: // SVN/RND项目库 UUID: d07d5450-0a36-4e07-90d2-9411ff75afe9 修订:140节点类型:目录 计划正常上次更改作者:罗伊 范德瓦尔克上次更改修订:140 上次更改日期:2009-06-09 14点13分29秒 +0200(周二,09六月2009)

然而蟒蛇脚本只是打印以下内容。

路径:

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

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

+0

为什么af的答案是有效的,它并不实际工作,你不能在单引号内部展开一个变量(试着'echo'$ PATH')。 – tonfa 2009-08-26 08:29:19

回答

0

是的,你需要把你的输入引用到python/runtest.py中,否则argv [1]只会把它输入到第一个空格。就像这样:

ssh [email protected] "python/runtest.py \"$XAS_SVN\"" 
+0

你测试了这个吗?如果您使用单引号,变量XAS_SVN将不会被展开。 – tonfa 2009-08-26 08:22:34

+0

是的,的确如此。在测试我未编辑的答案时,我有点混淆,就像现在这样。我用不同的shell测试了它,并且它以不同的方式处理引号。我的错。 – 2009-08-26 08:33:10

+0

首先它不起作用,但在编辑完成后,它完美地工作,谢谢! – 2009-08-26 10:19:41

1

既然你在可变空间,你需要逃避他们或阅读脚本的所有参数:

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

但它可能是更好地使用标准输入/输出到。沟通,特别是如果可以有一些字符容易受到输出外壳(如“`$')被解释 在python脚本做:

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

,并在外壳:

svn info | ssh [email protected] python/runtests.py 
+0

是的!比其他答案好得多 – 2010-02-09 03:57:36