5

大きなディレクトリ構造内のすべてのファイルへのシンボリック リンクを含むフォルダーを作成したいと考えています。最初に使用subprocess.call(["cmd", "/C", "mklink", linkname, filename])したところ、機能しましたが、シンボリック リンクごとに新しいコマンド ウィンドウが開きました。

ウィンドウがポップアップせずにバックグラウンドでコマンドを実行する方法がわからなかったので、現在、1 つの CMD ウィンドウを開いたままにして、標準入力経由でコマンドを実行しようとしています。

def makelink(fullname, targetfolder, cmdprocess):
    linkname = os.path.join(targetfolder, re.sub(r"[\/\\\:\*\?\"\<\>\|]", "-", fullname))
    if not os.path.exists(linkname):
        try:
            os.remove(linkname)
            print("Invalid symlink removed:", linkname)
        except: pass
    if not os.path.exists(linkname):
        cmdprocess.stdin.write("mklink " + linkname + " " + fullname + "\r\n")

どこ

cmdprocess = subprocess.Popen("cmd",
                              stdin  = subprocess.PIPE,
                              stdout = subprocess.PIPE,
                              stderr = subprocess.PIPE)

ただし、次のエラーが表示されます。

File "mypythonfile.py", line 181, in makelink
cmdprocess.stdin.write("mklink " + linkname + " " + fullname + "\r\n")
TypeError: 'str' does not support the buffer interface

これはどういう意味で、どうすれば解決できますか?

4

1 に答える 1

1

Python 文字列は Unicode ですが、書き込み先のパイプはバイトのみをサポートしています。試す:

cmdprocess.stdin.write(("mklink " + linkname + " " + fullname + "\r\n").encode("utf-8"))
于 2011-03-09T22:47:21.343 に答える