5

Pythonを使用して、存在しないパスを指すシンボリックリンクを作成したいと思います。ただし、os.symlinkは「OSError:[Errno 2]そのようなファイルまたはディレクトリはありません:」について文句を言うだけです。これはlnプログラムで簡単に実行できますが、 Pythonからlnプログラムを呼び出さずにPythonで実行するにはどうすればよいですか。

編集: どういうわけか私は本当にこれを台無しにしました:/...以下の両方の答えは正しいです

4

4 に答える 4

9

このようなエラーは、存在しないディレクトリにシンボリックリンクを作成しようとすると発生します。たとえば、/tmp/subdir存在しない場合、次のコードは失敗します。

os.symlink('/usr/bin/python', '/tmp/subdir/python')

しかし、これは正常に実行されるはずです。

src = '/usr/bin/python'
dst = '/tmp/subdir/python'

if not os.path.isdir(os.path.dirname(dst)):
    os.makedirs(os.path.dirname(dst))
os.symlink(src, dst)
于 2009-11-19T12:24:41.453 に答える
3

シンボリックリンクを作成するためにファイルが存在する必要はありません。次の例は、存在しないファイルへのシンボリック リンクの作成を示しています。

まず、 という名前のファイルがないことを確認しfoobarます/home/wieslander/tmp

[wieslander@rizzo tmp]$ ls -l /home/wieslander/tmp/foobar
ls: cannot access /home/wieslander/tmp/foobar: No such file or directory

brokensymlinkを指す名前のシンボリックリンクを作成します/home/wieslander/tmp/foobar

[wieslander@rizzo tmp]$ python
Python 2.5.2 (r252:60911, Sep 30 2008, 15:42:03)
[GCC 4.3.2 20080917 (Red Hat 4.3.2-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.symlink('/home/wieslander/tmp/foobar', 'brokensymlink')

シンボリック リンクが作成されたことと、リンク先がまだ存在していないことを確認します。

[wieslander@rizzo tmp]$ ls -l brokensymlink
lrwxrwxrwx 1 wieslander wieslander 27 19 nov 13.13 brokensymlink -> /home/wieslander/tmp/foobar
[wieslander@rizzo tmp]$ ls -l /home/wieslander/tmp/foobar
ls: cannot access /home/wieslander/tmp/foobar: No such file or directory
于 2009-11-19T12:19:25.473 に答える
0

これはあなたの答えかもしれません:

$ python
Python 2.5.2 (r252:60911, Dec  2 2008, 09:26:14)
[GCC 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.symlink('/this/does/not/exist', 'broken')
>>> os.symlink('broken', '/this/does/not/exist')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 2] No such file or directory

議論を逆にしましたか?それとも、存在しないディレクトリにシンボリックリンクを作成しようとしているだけですか?

于 2009-11-19T12:29:04.247 に答える
0

正しいパラメーターで symlink を呼び出していますか?

os.symlink('/usr/bin/python', 'python')

これにより、現在の作業ディレクトリにある python から /usr/bin/python へのシンボリック リンクが作成されます。

于 2009-11-19T12:08:17.757 に答える