通过python paramiko ssh会话执行Wine命令时失败

魅族中村

我正在尝试通过ssh在运行ubuntu 20.04.1 LTS的计算机上使用“文本到语音”程序balabolka和它的命令行版本Balcon。首先,我从http://www.cross-plus-a.com/fr/bconsole.htm下载了balcon ,然后经过一些研究后设法使它工作,这需要安装Wine,winetricks,Microsoft SpeechPlatformRuntime,speechsdk和msxml6 。我还安装了一些SAPI 5 TTS声音。我按照https://askubuntu.com/questions/1189046/wine-how-to-use-sapi-5-voices-for-tts-application-balabolka中所述的步骤进行操作

我在测试时使用以下命令行: WINEPREFIX="$HOME/prefix32" wine "$HOME/prefix32/drive_c/Program Files/balcon/balcon/balcon.exe" -f text.txt -n Daniel_Full_22kHz -w audiooutput.wav

直接在主机上运行时,此命令可以完美运行,但是我的目标是通过另一台计算机上的ssh运行此命令。出于测试目的,我尝试直接从Windows命令行使用ssh连接,也使用python + paramiko。

这是一个奇怪的部分:重启Ubuntu计算机后,使用任何上述方法的第一次尝试都成功,但是随后的尝试总是失败。

使用直接ssh连接时,出现以下错误:

〜$ WINPREFIX =“ $ HOME / prefix32” wine“ $ HOME / prefix32 / drive_c / Program Files / balcon / balcon / balcon.exe” -f text.txt -n Daniel_Full_22kHz -w audiooutput.wav 0009:err:winediag:nodrv_CreateWindow应用程序试图创建一个窗口,但是无法加载驱动程序。0009:err:winediag:nodrv_CreateWindow确保您的X服务器正在运行,并且$ DISPLAY设置正确。0009:err:ole:CoGetClassObject类{d941651c-44e6-4c17-badf-c36826fc3424}未注册0009:err:ole:create_server类{d941651c-44e6-4c17-badf-c36826fc3424}未注册0009:err:ole:CoGetClassObject no可以为上下文0x5 0009:err:ole:CoGetClassObject类{cb96b400-c743-11cd-80e5-00aa003e4b50}未注册创建类对象{d941651c-44e6-4c17-badf-c36826fc3424} 0009:err:ole:

该错误表明$ DISPLAY环境变量存在问题。使用时,echo $DISPLAY我发现未在ssh控制台中设置该变量,因此我使用export DISPLAY=:0值:0对其进行设置,该值是通过echo $DISPLAY在ubuntu ssh服务器上运行localy获得的修改之后,所有后续尝试都可以正常工作。

我尝试使用python + paramiko做同样的事情,这是我的脚本:

import os
import shell
import paramiko

def connectSSH(key,host,user):
    c = paramiko.SSHClient()
    c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    print("connecting")
    c.connect( hostname = host, username = user, pkey = k )
    ftp_client = c.open_sftp()
    print("connected")
    filet = open("./text.txt","w")
    filet.write("Hi this is a text to speech test with daniel voice")
    filet.close()
    ftp_client.put("./text.txt","./text.txt")
    env_dict = {"DISPLAY":":0"}
    cmd = "WINPREFIX=\"$HOME/prefix32\" wine \"$HOME/prefix32/drive_c/Program Files/balcon/balcon/balcon.exe \" -f %s -n %s -w %s" % ("kesra2.txt", "Daniel_Full_22kHz","audiooutput.wav")
    print(cmd)
    stdin,stdout,stderr=c.exec_command(cmd,environment=env_dict)
    print(stdout.readlines())
    print(stderr.readlines())
    ftp_client.get("audiooutput.wav","audiooutput.wav")
    ftp_client.close()

最初我遇到了相同的$ DISPLAY错误,因此我使用来添加它,env_dict = {"DISPLAY":":0"}并允许在服务器sshd配置上进行此变量修改,但是现在我总是会收到错误:

0009:err:ole:CoGetClassObject类{d941651c-44e6-4c17-badf-c36826fc3424}未注册0009:err:ole:create_server类{d941651c-44e6-4c17-badf-c36826fc3424}未注册0009:err:ole:CoGetClassObject no可以为上下文0x5 0009:err:ole:CoGetClassObject类{cb96b400-c743-11cd-80e5-00aa003e4b50}未注册创建类对象{d941651c-44e6-4c17-badf-c36826fc3424} 0009:err:ole:CoGetClassObject类{cb96b400 -c743-11cd-80e5-00aa003e4b50}未注册0009:err:ole:create_server类{cb96b400-c743-11cd-80e5-00aa003e4b50}未注册0009:err:ole:CoGetClassObject没有类对象{cb96b400-c743-11cd-80e5 -00aa003e4b50}可以为上下文0x7创建错误:未选择语音

错误的最后一部分Error: voice not selected并不重要,因为在其他情况下,相同的cmd仍可正常工作,虽然有些其他地方失败了,但我找不到它。另外我不明白为什么无论使用哪种方法(ssh控制台或python + paramiko),服务器重启后的第一次尝试都可以正常工作

我尝试使用paramiko的invokeshell()获得相同的结果

任何帮助都感激不尽

魅族中村

经过进一步研究,似乎该问题与“ WINEPREFIX”变量有关。通过将其移动到env_dict内并使用绝对路径,该问题不再可复制

env_dict = {"DISPLAY:":0", "WINEPREFIX":"absolute/path/to/prefix"}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Paramiko通过SSH执行重新启动命令

来自分类Dev

使用Paramiko通过SSH执行重新启动命令

来自分类Dev

无法通过Paramiko SSH发送AT命令

来自分类Dev

使用Python Paramiko嵌套的SSH

来自分类Dev

使用paramiko python ssh库通过xterm运行来远程执行程序

来自分类Dev

通过 paramiko 使用一个 SSH 对象连续执行两个命令

来自分类Dev

在Python Paramiko中的SSH服务器上的辅助Shell /命令中执行(子)命令

来自分类Dev

Python paramiko.ssh_exception.SSHException:无现有会话

来自分类Dev

使用Python Paramiko exec_command执行某些Unix命令会失败,并显示“ <command> not found”

来自分类Dev

在Python中使用paramiko生成SSH密钥对

来自分类Dev

在Python中使用paramiko生成SSH密钥对

来自分类Dev

在Python中使用paramiko生成SSH密钥对

来自分类Dev

多跳SSH中的Python Paramiko listdir

来自分类Dev

使用多个命令的Python paramiko模块

来自分类Dev

使用Python和paramiko以root身份执行远程命令

来自分类Dev

SSH.Paramiko.Command 执行失败

来自分类Dev

使用Paramiko在python中通过ssh实现交互式shell?

来自分类Dev

使用python paramiko时如何过滤ssh横幅

来自分类Dev

在Paramiko中通过ssh保持ssh的有效机制

来自分类Dev

Python-通过PHP使用Paramiko的SFTP

来自分类Dev

通过 Paramiko 在 Cisco 交换机上执行多个命令 - 提高性能

来自分类Dev

如何与paramiko保持会话

来自分类Dev

SSHClient paramiko Python?

来自分类Dev

Python-Paramiko-不兼容的SSH服务器

来自分类Dev

Python Paramiko将CTRL + C发送到ssh shell

来自分类Dev

如何在Python Paramiko中配置等效的ssh StrictHostKeyChecking = no

来自分类Dev

使用特定IP源的Paramiko-Python SSH脚本杜松

来自分类Dev

Paramiko SSH-使用Python的多个身份验证凭据

来自分类Dev

Python SSH:使用 fabric.api 作为 paramiko 的替代方案

Related 相关文章

  1. 1

    使用Paramiko通过SSH执行重新启动命令

  2. 2

    使用Paramiko通过SSH执行重新启动命令

  3. 3

    无法通过Paramiko SSH发送AT命令

  4. 4

    使用Python Paramiko嵌套的SSH

  5. 5

    使用paramiko python ssh库通过xterm运行来远程执行程序

  6. 6

    通过 paramiko 使用一个 SSH 对象连续执行两个命令

  7. 7

    在Python Paramiko中的SSH服务器上的辅助Shell /命令中执行(子)命令

  8. 8

    Python paramiko.ssh_exception.SSHException:无现有会话

  9. 9

    使用Python Paramiko exec_command执行某些Unix命令会失败,并显示“ <command> not found”

  10. 10

    在Python中使用paramiko生成SSH密钥对

  11. 11

    在Python中使用paramiko生成SSH密钥对

  12. 12

    在Python中使用paramiko生成SSH密钥对

  13. 13

    多跳SSH中的Python Paramiko listdir

  14. 14

    使用多个命令的Python paramiko模块

  15. 15

    使用Python和paramiko以root身份执行远程命令

  16. 16

    SSH.Paramiko.Command 执行失败

  17. 17

    使用Paramiko在python中通过ssh实现交互式shell?

  18. 18

    使用python paramiko时如何过滤ssh横幅

  19. 19

    在Paramiko中通过ssh保持ssh的有效机制

  20. 20

    Python-通过PHP使用Paramiko的SFTP

  21. 21

    通过 Paramiko 在 Cisco 交换机上执行多个命令 - 提高性能

  22. 22

    如何与paramiko保持会话

  23. 23

    SSHClient paramiko Python?

  24. 24

    Python-Paramiko-不兼容的SSH服务器

  25. 25

    Python Paramiko将CTRL + C发送到ssh shell

  26. 26

    如何在Python Paramiko中配置等效的ssh StrictHostKeyChecking = no

  27. 27

    使用特定IP源的Paramiko-Python SSH脚本杜松

  28. 28

    Paramiko SSH-使用Python的多个身份验证凭据

  29. 29

    Python SSH:使用 fabric.api 作为 paramiko 的替代方案

热门标签

归档