Python变量和subprocess.call

时间:2016-03-29 08:45:32

标签: python linux bash

首先,我想说我是这个网站的新手,任何批评都表示赞赏。

我正在尝试修改Python脚本以读取rfid密钥,然后将变量UID传递给将对其进行身份验证等的脚本(bash)。到目前为止,我已设法隔离UID,我可以在python中打印它但我无法在bash脚本中获取它。

 print "" + str(uid[0]) + "" + str(uid[1]) + ""+ str(uid[2]) + "" + str(uid[3]) 

这是我用来打印uid的字符串,如何将其传递给bash脚本?谢谢!

1 个答案:

答案 0 :(得分:1)

使用子流程模块:

import subprocess

uid = str(uid[0]) + str(uid[1]) + str(uid[2]) + str(uid[3])
result = subprocess.run(['check.sh', uid], stdout=subprocess.PIPE)
print(result.stdout)

如果您使用3.5之前的python版本,而不是run,则必须使用call

为此,bash程序必须接受uid作为命令行参数。如果需要将字符串传递给bash脚本,还需要做一些工作:

import subprocess
import io
import tempfile

uid = str(uid[0]) + str(uid[1]) + str(uid[2]) + str(uid[3])

f = tempfile.TemporaryFile(mode='w+t')
f.write(uid)
f.seek(0)

result = subprocess.run(['check.sh', uid], stdin=f,  stdout=subprocess.PIPE)

f.close()

print(result.stdout)

阅读laravel/laravel#3699以获取更多见解。

接口已经改变了一点,所以要注意你的Python版本。 2.x的工作方式不同于3.4而不是3.5。虽然有兼容的方式。

相关问题