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

Python打印重定向为stdin命令行参数,python,shell,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中打印,因此,如果我从s

我有一个二进制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-in subprocess在python中直接调用foo,这并不理想,因为如果我在foo中触发seg错误,它不会反映在bash中。

因此
subprocess
起作用,但您没有使用,因为您没有从“foo”(二进制)获得输出

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

运行:

./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已声明这与他的应用程序无关,但对于其他可能在阅读本文时考虑到其他应用程序的人,请注意,在命令行上传递密码并不安全:系统上的所有用户都可以随时使用完整的命令行。

@John1024,这是行不通的,因为foo检查是否有两个参数。它报告了错误,因为没有足够的参数。谢谢你的提示,但我不担心密码窥探。这只是一个询问如何提供两个参数的示例。“call”并没有在stdout中生成分段错误。它确实生成了一个核心转储文件,但我想在stdout中看到seg故障信息。如果我只是通过在shell中直接调用foo来提供参数,那么shell中将包含seg fault信息。你能为使用通讯输入一个正确的代码吗?谢谢,你说得对。我忘了在python脚本中添加了额外的调试打印。我对它进行了评论,现在它可以工作了。