subprocess.Popen在PyCharm中的反应方式与Windows CMD中的反应不同,当存在像�]这样的“有趣”字符时。

问题描述 投票:0回答:1

首先,是的,我已经搜索过,没有找到任何解决方案。所以,问题是:

我有一个在PyCharm中创建的第一个python脚本CommandLine.py,该脚本从网站请求一个Json文件,并将结果打印在Terminal上。

    for val in my_json[:200]:
        i += 1
        print("    {} - {}".format(str(i).zfill(2), val))

此命令行脚本的用法如下:

python CommandLine.py --user MyUserName --password MyPWD --website www.about.com --output C:\Users\MyName\MyFolder --mail YesOrNo and so on...

一切正常,我得到了结果,即使结果中包含俄语字符,日语字符以及“有趣”字符(例如:…)。它可以在PyCharm和Windows CMD中以相同的方式工作(在这两个字符中都印有类似这样的“有趣”字符。]

但是第一个脚本有点讨厌所有参数(对我来说,对于伙伴……),所以我创建了第二个python脚本,名为GUI.py。它是带有Tkinter python lib的图形用户界面。您可以使用其上的所有Entry小部件来选择所需的参数。然后,单击“按钮”窗口小部件,然后在名为“控制台”的文本窗口小部件中获得结果(以“模拟”终端)。我是用subprocess.Popen这样的:

    cmd = 'python CommandLine.py --user MyUserName --password MyPWD 
            --website www.about.com --output C:\Users\MyName\MyFolder 
            --mail YesOrNo and so on...'

    process = subprocess.Popen(cmd, stdout=subprocess.PIPE, encoding='utf-8')

    while True:
        returnStatus = process.poll()
        output = process.stdout.readline()
        if returnStatus is not None:
            break
        if output:
            line = output.strip() # leave the white space
            console.insert('end', line + '\n')
            console.yview_moveto(1)
            console.update()

[GUI.py在PyCharm中工作正常,我得到的结果与CommandLine.py(具有非拉丁字符)没有代码错误。

但是!对,但是。在Windows CMD中,第二个脚本GUI.py始终因此代码错误而崩溃:

Traceback (most recent call last):
  File "C:\Users\MyName\MyFolder\CommandLine.py", line 343, in <module>
    print("    {} - {}".format(str(i).zfill(2), val))
  File "C:\Python37\lib\encodings\cp1252.py", line 19, in encode
    return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode characters in position 10-11: character maps to <undefined>

我不明白为什么,因为第一个脚本CommandLine.py在PyCharm和Win CMD中都可以单独正常工作。

subprocess.Popen是CMD中的问题吗?我认为是这样,但找不到解决方案。

我已经尝试过:

  • mbcsansiISO-8859-1中的process = subprocess.Popen(cmd, stdout=subprocess.PIPE, encoding='utf-8')更改编码

  • 删除process = subprocess.Popen(cmd, stdout=subprocess.PIPE, encoding='utf-8')中的编码

  • 添加Shell=True

  • chcp 65001之前的CMD中执行python GUI.py,>

  • 没有解决问题,仍然有代码错误。

顺便说一句,我使用subprocess.Popen获取“实时”输出以将其打印到“控制台”窗口小部件。

我在哪里错?请需要帮助。预先感谢。

PS:对不起,英语不是我的母语。

首先,是的,我已经搜索过,没有找到任何解决方案。因此,问题是:我在PyCharm中创建了第一个python脚本CommandLine.py,他从网站请求Json文件,然后...

python unicode cmd pycharm subprocess
1个回答
0
投票

也许尝试调用子过程。用env={'PYTHONIOENCODING': 'utf-8'}打开?

© www.soinside.com 2019 - 2024. All rights reserved.