gpt4 book ai didi

python - 如何在Python的多个sheet中执行多个命令

转载 作者:太空宇宙 更新时间:2023-11-04 04:10:14 26 4
gpt4 key购买 nike

问题是我需要在同一进程中访问多个shell,因为我有一个可以连接到多个节点的系统,我可能需要在系统上执行命令,然后在节点上执行命令,并且我需要在节点上发送多个命令而不创建另一个进程

我编写此代码是为了访问我的 Solaris 系统上的 Sybase 数据库(由于某种原因,我无法在我们拥有的 Python 2.6 版本上安装 Sybase 模块)

cmd1 = 'isql -Usa -w1024 -P********'
cmd2 = 'use imhdb'
cmd3 = 'go'
cmd4 = "SELECT Id_number, Object_name FROM IM_top WHERE Object_name LIKE'%BtsSiteMgr=CAI3533%'"

final = Popen("{0}; {1}; {2}; {3}".format(cmd1, cmd2, cmd3,cmd4),shell=True,stdin=PIPE,stdout=PIPE, stderr=STDOUT, close_fds=True)
stdout, nothing = final.communicate()
print(stdout)

输出: /bin/sh:使用:未找到 /bin/sh: 去: 未找到 /bin/sh:选择:未找到

那是因为在执行第一个命令后,它会创建另一个进程作为 bash,而不是在 sybase sql 控制台中,因此命令当然无法识别。那么我该怎么做?

最佳答案

AFAICS 认为,isql 是打开交互式控制台的命令,随后的命令(use imhdbgoSELECT)是要在该控制台中输入的命令。

您的方法将为每个命令创建一个单独的进程,因此会失败。

您应该只为第一个命令创建一个子进程,然后将三个 SQL 相关命令通过管道导入现有子进程:

sqlProcess = Popen(cmd1, shell='True', stdin=PIPE, stdout=PIPE, stderr=PIPE)
print >>sqlProcess.stdin, cmd2
print >>sqlProcess.stdin, cmd3
print >>sqlProcess.stdin, cmd4
sqlProcess.stdin.close() # signal end of input

然后您可以从该子进程的标准输出中获取结果:

print sqlProcess.stdout.read()

关于python - 如何在Python的多个sheet中执行多个命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19513205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com