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)

フォローしてみてもうまくいきません。コマンドで変数pidを使用するにはどうすればよいですか?os.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は末尾の改行を削除しないため、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 に答える