家伙!我在Debian 7终端试图运行一个python脚本,通过telegram-cli发送消息。以下行给出了一个错误:
check_call(["/usr/local/tg/bin/telegram-cli", "-W", "-k", "/usr/local/tg/tg-server.pub", "-e", msg])
在这一行的末尾,“msg”是一个变量......
错误是这样的:
Traceback (most recent call last):
File "LogServicos.py", line 60, in <module>
msg_telegram()
File "LogServicos.py", line 17, in msg_telegram
check_call(["/usr/local/tg/bin/telegram-cli", "-W", "-k", "/usr/local/tg/tg-server.pub", "-e", msg])
File "/usr/local/lib/python3.5/subprocess.py", line 579, in check_call
retcode = call(*popenargs, **kwargs)
File "/usr/local/lib/python3.5/subprocess.py", line 560, in call
with Popen(*popenargs, **kwargs) as p:
File "/usr/local/lib/python3.5/subprocess.py", line 950, in __init__
restore_signals, start_new_session)
File "/usr/local/lib/python3.5/subprocess.py", line 1483, in _execute_child
restore_signals, start_new_session, preexec_fn)
UnicodeEncodeError: 'ascii' codec can't encode character '\xe7' in position 25: ordinal not in range(128)
使用python 3.5.1,我的debian 15.10上的脚本是完全功能的,与Debian中的相同。
有任何帮助吗?谢谢!
答案 0 :(得分:0)
传递给telegram-cli
的命令行参数包含非ascii字符,在这种情况下msg
包含字符ç
(\xe7
)。在* nix上,文件名和命令行参数最后只是字节,因此需要将unicode字符串转换为字节才能使用。
python uses sys.getfilesystemencoding()
用于此类转换,通常取决于LANG
和LC_*
环境变量。
对于此程序失败的计算机,默认语言环境仅支持ascii(可能是C
语言环境),您可以使用locale
命令查看哪一个正确使用。< / p>
要修复此错误,您可以:
msg
时将其传递给命令行,但只有在telepathy-client
不依赖当前语言环境来解释它时才能正常工作,否则你可能会以垃圾字符结束locale -a
检查系统支持的区域设置,如果列表中没有显示合适的区域设置,则可能需要安装合适的新区域设置(如here或{{3}所述})