如何在python os.path.exists中使用变量

如何在python os.path.exists中使用变量,python,linux,Python,Linux,这是我的密码 [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

这是我的密码

[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)
编辑:

如果我手动键入PID编号,它会工作

>>> print pid
24154

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

最好的解决方案是在此处使用:

但是,请注意,您的连接应该是有效的(尽管与
os.path.join()
)相比,它更脆弱,不推荐使用),因此您确定路径确实存在吗
False
表示它已工作且路径不存在

注:

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


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

最佳解决方案是在此处使用:

但是,请注意,您的连接应该是有效的(尽管与
os.path.join()
)相比,它更脆弱,不推荐使用),因此您确定路径确实存在吗
False
表示它已工作且路径不存在

注:

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


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

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

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

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

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

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

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


打开文件最好使用
with
语句,这样,文件在所有情况下都会正确关闭。我不确定你在问什么。你的意思是?我的意思是如何在打开文件的情况下使用with语句?只需键入
pid
并按enter键,问题就会变得很明显。有关详细信息,请参见我的答案。@Satish我链接了一个解释。打开文件最好使用
with
语句,这样,文件在所有情况下都会正确关闭。我不确定您在那里问什么。你的意思是?我的意思是如何在打开文件的情况下使用with语句?只需键入
pid
并按enter键,问题就会变得很明显。有关详细信息,请参见我的答案。@Satish我链接了一个解释。运行了一些快速测试。连接是有效的,但是@satish(和其他人)应该避免possible@Satish它怎么不起作用?它是否返回
False
?如果是这样,您是否检查了该文件是否存在,并且您的脚本是否有权对其执行
os.stat()
?如果我手动键入PID编号(就像我在问题中所做的那样),它可以工作,但不能与变量一起工作。运行了一些快速测试。连接是有效的,但是@satish(和其他人)应该避免possible@Satish它怎么不起作用?它是否返回
False
?如果是这样,您是否检查了文件是否存在,并且您的脚本是否有权对其执行
os.stat()
?如果我手动键入PID编号(就像我在问题中所做的那样),它可以工作,但不能与变量一起工作。+1,我刚刚单击了它,但您首先进入了那里。这就是OP想要的答案。太棒了,它很管用!!>>exists(os.path.join('/proc',pid.strip()))True+1,我刚刚点击了它,但你先进入了。这就是OP想要的答案。太棒了,它很管用!!>>存在(os.path.join('/proc',pid.strip())True
os.path.exists(os.path.join('/proc', pid.strip()))