Python打印重定向为stdin命令行参数

时间:2016-07-23 22:45:12

标签: python shell

我有一个二进制文件foo,需要两个命令行参数:用户名和密码。

我编写了script.py来生成用户名和密码。目前,我使用print将它们打印到stdout,然后当我在shell中调用foo时手动将它们复制并粘贴到shell中,即

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

但是,我需要生成在stdout中无法打印的特殊字节,因此如果我从stdout复制并粘贴,这些特殊字节值就会消失。如何将我的python输出重定向为foo的参数?

BTW:我尝试在子进程中使用call直接在python中调用foo,这不太理想,因为如果我在foo中触发了一个seg错误,它就不会反映在bash中。

2 个答案:

答案 0 :(得分: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已声明这与他的应用程序无关,但对于其他可能在阅读其他应用程序的人时,请注意在命令行上传递密码是不安全:系统上的所有用户都可以使用完整的命令行。

答案 1 :(得分:1)

所以subprocess有效,但你没有使用,因为你没有得到'foo'(二进制)的输出?

您可以使用communicate()函数从二进制文件中获取输出。