2016-07-23 45 views
1

我有一个二进制foo需要两个命令行参数:用户名和密码。Python打印重定向作为标准输入命令行参数

我写了script.py来生成用户名和密码。目前,我使用的打印给他们打印到标准输出,然后手动复制并粘贴在外壳当我调用foo的外壳,即

$python script.py 
username password 
(i copied and paste the output below) 
$./foo username password 

但是,我需要生成未在打印的特殊字节标准输出,因此如果我从标准输出复制并粘贴,这些特殊的字节值不见了。我如何重定向我的python输出作为foo的参数?

顺便说一句:我已经尝试过在子进程中使用调用来直接调用python中的foo,这并不理想,因为如果我在foo中触发seg错误,它不会反映在bash中。

+0

@ John1024,这是行不通的,因为foo检查是否有两个参数。它报告错误是因为没有足够的参数。谢谢你的提示,但我并不担心密码监听。这只是一个要求如何提供两个参数的例子。 – drdot

回答

2

运行:

./foo $(python script.py) 

为了证明该工作,并提供foo有两个参数,让我们用这个script.py:

$ cat script.py 
#!/usr/bin/python 
print("name1 pass1") 

而且让我们用这个foo,以便我们能够看到什么向其提供论据:

$ cat foo 
#!/bin/sh 
echo "1=$1 2=$2" 

这是执行结果:

$ ./foo $(python script.py) 
1=name1 2=pass1 

正如你所看到的,foo收到的名称作为其第一个参数和密码作为其第二个参数。

安全说明: OP声明,这与他的应用程序无关,但对于其他可能会在其他应用程序中阅读此内容的人,请注意,在命令行上传递密码并不安全:命令行对系统中的所有用户都是可用的。

+0

你说得对。我忘了我在我的python脚本中添加了一个额外的调试打印。我评论它,它现在起作用。 – drdot

1

因此subprocess工作,但你没有使用,因为你没有得到'foo'(二进制)的输出?

您可以使用communicate()函数将二进制输出返回。

+0

“调用”未在stdout中产生分段错误。它确实生成了一个核心转储文件,但是我希望在标准输出中看到seg错误信息。如果我通过在shell中直接调用foo来提供参数,它将在shell中拥有seg fault信息。你可以把正确的代码用于沟通吗?谢谢, – drdot

相关问题