我有一个应用程序,可以直接从终端接收输入,也可以使用管道将另一个程序的输出传递到这个程序的stdin中。我要做的是使用python生成输出,使其格式正确,并将其从同一个脚本传递给该程序的stdin。代码如下:#!/usr/bin/python
import os
import subprocess
import plistlib
import sys
def appScan():
os.system("system_profiler -xml SPApplicationsDataType > apps.xml")
appList = plistlib.readPlist("apps.xml")
sys.stdout.write( "Mac_App_List\n"
"Delimiters=\"^\"\n"
"string50 string50\n"
"Name^Version\n")
appDict = appList[0]['_items']
for x in appDict:
if 'version' in x:
print x['_name'] + "^" + x['version'] + "^"
else:
print x['_name'] + "^" + "no version found" + "^"
proc = subprocess.Popen(["/opt/altiris/notification/inventory/lib/helpers/aex- sendcustominv","-t","-"], shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
proc.communicate(input=appScan())
我为什么不调用子进程。但是,如果我删除子进程项,只需将脚本打印到stdout,然后从终端调用脚本(python应用程序扫描.py|aex sendcustominv),aex sendcustominv可以很好地接受输入。有没有什么方法可以将python中的函数输出发送到子进程的stdin?在