我有一个二进制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的参数?

顺便说一句:我曾尝试在子进程中使用call来直接在python中调用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声明这与他的应用程序无关,但是对于其他可能会记住其他应用程序的人来说,请注意在命令行上传递密码并不安全:完整的命令行对于系统上的所有用户。

08-26 21:17
查看更多