首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python脚本中的文件描述符不正确,但输出正确

python脚本中的文件描述符不正确,但输出正确
EN

Stack Overflow用户
提问于 2020-10-01 22:18:12
回答 1查看 226关注 0票数 0

下面脚本的输出是正确的,但每次打印一行时,它也会打印错误。

代码语言:javascript
运行
复制
import os

for pid in os.listdir ( '/proc' ) :
    if pid.isdigit ( ) :
        try :
            p = open ( os.path.join ( '/proc' , pid , 'cmdline' ) , 'r' )
            CMD = p.read ( )
            try:
                tty = os.ttyname ( int ( pid ) )
            except OSError as error:
                print(error)
            print ( int ( pid ) , CMD , tty )
            p.close()
        except OSError as error:
            continue

输出:

代码语言:javascript
运行
复制
(1, '/sbin/init\x00splash\x00', '/dev/pts/0')
(2, '', '/dev/pts/0')
[Errno 25] Inappropriate ioctl for device
(3, '', '/dev/pts/0')
[Errno 9] Bad file descriptor
(4, '', '/dev/pts/0')
[Errno 9] Bad file descriptor

etc....
EN

回答 1

Stack Overflow用户

发布于 2020-10-01 22:38:14

您看到错误,因为指定的文件描述符与任何终端设备都没有关联。

代码语言:javascript
运行
复制
>>> r, w = os.pipe() 
>>> os.ttyname(r)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
OSError: [Errno 25] Inappropriate ioctl for device
>>> r
6
>>> os.ttyname(6)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
OSError: [Errno 25] Inappropriate ioctl for device

当它被关联时。

代码语言:javascript
运行
复制
>>> import os
>>> master, slave = os.openpty() 
>>> os.ttyname(master)
'/dev/ptmx'
>>> master
4
>>> os.ttyname(4)
'/dev/ptmx'

Source

snippet shared上的一些小改进:

代码语言:javascript
运行
复制
import os

for pid in os.listdir('/proc' ):
    if pid.isdigit():
        try:
            with open(os.path.join('/proc', pid, 'cmdline'), 'r') as p:  # context way manages file close on its own
                CMD = p.read()
                tty = os.ttyname(int(pid))
                print(f"PID: {int( pid )}, CMD: {CMD}, TTY: {tty}")
        except OSError as error:  # Can be handled with same Same exception
            print(error)
            # continue   # Since there are no further lines of code hence
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64157297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档