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

2 投票
2 回答
1063 浏览
提问于 2025-04-15 13:52

我刚开始学编程,想在网上找方法把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 时,我得到了这个结果。

路径: . URL: //svn/rnd-projects/testing/python 仓库根目录: //svn/rnd-projects 仓库 UUID: d07d5450-0a36-4e07-90d2-9411ff75afe9 版本: 140 节点类型: 目录 计划: 正常 最后修改作者: Roy van der Valk 最后修改版本: 140 最后修改日期: 2009-06-09 14:13:29 +0200 (2009年6月9日,星期二)

但是Python脚本只打印了以下内容。

路径:

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

我知道有subprocess模块和Popen函数,但我觉得这不是解决办法,因为Python脚本是在另一台服务器上运行的。

2 个回答

1

因为你的变量中有空格,所以你需要对这些空格进行处理,或者在你的脚本中读取所有的参数。

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

不过,使用标准输入和输出(stdin/stdout)来进行交流可能会更好,特别是如果输出中可能有一些特殊字符(比如“`$”)会被命令行解释的话。在Python脚本中,你可以这样做:

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

然后在命令行中:

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

是的,你需要把输入的内容用引号括起来,放在python/runtest.py后面。否则,argv[1]只会读取到第一个空格之前的部分。就像这样:

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

撰写回答