当前位置: 首页 > 知识库问答 >
问题:

如何获取子进程输出并维护编码

刘浩思
2023-03-14

我很可能错过了一些真正容易的东西,但我不明白为什么那些似乎对其他人都有效的东西对我却不有效。

目标:我想用非英语字符的本地输出运行shell命令,在变量中捕获输出,然后打印到屏幕。问题:所有我的输出应该有非英语字符被替换为?
思考:编码有问题吗?我正在运行Python3.8,不应该!!同样运行Windows10,但也发生在Windows7和Server2008中。

>>> p=subprocess.run("dir",shell=True,encoding="utf8")                     
 Volume in drive C has no label.
 Volume Serial Number is A22B-FA10

 Directory of C:\Users\jeronimo\Documents\Github

04/24/2021  08:17 AM    <DIR>          .
04/24/2021  08:17 AM    <DIR>          ..
07/21/2020  09:37 PM    <DIR>          scripts
04/24/2021  08:09 AM    <DIR>          **Администратор**
               1 File(s)            295 bytes
              11 Dir(s)  151,978,950,656 bytes free

>>> p=subprocess.run("dir",capture_output=True,shell=True,encoding="utf8")
>>> p.stdout
' Volume in drive C has no label.\n Volume Serial Number is A22B-FA10\n\n Directory of C:\\Users\\jeronimo\\Documents\\Github\n\n04/24/2021  08:17 AM    <DIR>          .\n04/24/2021  08:17 AM    <DIR>    
      ..\n05/18/2020  01:24 PM scripts\n04/24/2021  08:09 AM    <DIR>          **?????????????**\n               1 File(s)            295 bytes\n              11 Dir(s)  151,976,796,160 bytes free\n'

>>> print(p.stdout)
 Volume in drive C has no label.
 Volume Serial Number is A22B-FA10

 Directory of C:\Users\jeronimo\Documents\Github

04/24/2021  08:17 AM    <DIR>          .
04/24/2021  08:17 AM    <DIR>          ..
07/21/2020  09:37 PM    <DIR>          scripts
04/24/2021  08:09 AM    <DIR>          **?????????????**
               1 File(s)            295 bytes
              11 Dir(s)  151,976,796,160 bytes free

我尝试了子进程的许多变体--popen、run、check_output和call--都得到了相同的结果。我到底做错了什么?

共有1个答案

席成仁
2023-03-14

也许先将命令的输出pipe/direct到一个文件,然后打开并读取该文件?

p=subprocess.run("dir > aa.txt",capture_output=True,shell=True,encoding="utf8")
 类似资料:
  • 问题内容: 我试图用Python编写程序,并被告知运行.exe文件。运行此.exe文件时,它会吐出大量数据,并且我需要在屏幕上打印出一定的行。我很确定我需要使用或类似的东西,但是我是子处理的新手,没有任何线索。有人有简单的方法让我完成此工作吗? 问题答案: 像这样:

  • 问题内容: 是否可以从Shell脚本中的父进程ID获取子进程ID? 我有一个要使用Shell脚本执行的文件,这会导致一个新进程 process1 (父进程)。这个 过程1 已经分叉的另一个进程 过程2 (子进程)。使用脚本,我可以使用以下命令获取 process1 的pid : 但我无法获取子进程的pid。 问题答案: 只需使用:

  • 是否可以从外壳脚本中的父进程ID获取子进程ID? 我有一个要使用shell脚本执行的文件,这会导致一个新的进程process1(父进程)。此进程1已经派生了另一个进程process2(子进程)。使用脚本,我可以使用以下命令获得进程1的pid: 但是我无法获取子进程的pid。

  • 问题内容: 我对如何从ssh等终端子进程发送输入和接收输出有疑问。 我在Golang中找不到一个简单的示例,其工作原理与上述类似。 在Golang中,我想做这样的事情,但是似乎不起作用: 然而; 我不确定如何执行此操作,因为每次执行此ssh命令时,我只能获取输出。我无法通过代码自动输入密码。有没有人写过ssh等终端进程的示例?如果是这样,请分享。 问题答案: 由于上面的评论,我可以使用密码使用ss

  • 问题内容: 我正在尝试运行可执行文件并使用;捕获其输出;但是,我似乎并没有获得全部输出。 手动打开时,它比原始exe文件少打印两行。 我尝试了一种具有相同结果的替代方法: 任何人都可以帮助我获取exe的完整数据吗? 正如塞巴斯蒂安的要求: 原始exe文件最后几行o / p: -Gdd:通用计数(1-1000) -Cdd:切割起始于(0-99)-Edd:切割终止于(1-100) 请在下面选择流文件编

  • 问题内容: 我有: 当我在Linux中键入命令时,该命令有效。我懂了 我究竟做错了什么? 问题答案: 试试这个: