0

这是我的代码

[root@04 ~]# python
Python 2.4.3 (#1, May  5 2011, 16:39:10)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os.path
>>> pid = open('/var/run/httpd.pid' , 'r').read()
>>> print pid
24154
>>> os.path.exists('/proc/',pid)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: exists() takes exactly 1 argument (2 given)

即使我尝试跟随,它也不起作用。如何pidos.path.exists命令中使用变量?

>>> os.path.exists('/proc/'+pid)
False
>>>

编辑 :

如果我手动输入 PID 号,它可以工作

>>> print pid
24154

>>> os.path.exists('/proc/24154')
True
>>>
4

2 回答 2

5

问题是http.pid它不仅包含数字,还包含换行符。由于 Python 的read与 shell 的反引号不同,它不会去除尾随换行符,因此该pid变量包含一个类似的字符串,"12345\n"并且您的代码正在测试是否"/proc/12345\n"存在。

要更正此问题,请调用strip()您从文件中读取的字符串:

os.path.exists(os.path.join('/proc', pid.strip()))
于 2013-03-05T16:12:51.260 回答
2

最好的解决方案是在os.path.join()这里使用:

os.path.exists(os.path.join('/proc/', pid))

但是请注意,您的连接应该有效(尽管与 相比,它更脆弱且不推荐os.path.join()),所以您确定路径确实存在吗?False意味着它有效并且路径不存在。

文档说明:

如果 path 引用现有路径或打开的文件描述符,则返回 True。对于损坏的符号链接返回 False。在某些平台上,如果未授予对请求的文件执行 os.stat() 的权限,即使路径物理存在,此函数也可能返回 False。

重点补充。这意味着如果路径确实存在,您可能会遇到权限问题。

于 2013-03-05T16:05:26.907 回答