我有一个二进制foo,它需要两个命令行参数:username和password。
我已经编写了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:我尝试过在python中使用call-in子流程直接调用foo,这并不理想,因为如果我在foo中触发seg错误,它不会反映在bash中。
运行:
./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表示,这与他的应用程序无关,但对于其他可能在阅读时考虑到其他应用程序的人来说,请注意,在命令行上传递密码是不安全的:系统上的所有用户都可以使用完整的命令行。
所以subprocess
工作了,但你没有使用,因为你没有从"foo"(二进制)获得输出?
您可以使用communicate()函数从二进制文件中获取输出。