[ 新規に投稿する ]

WSL 出力の取得についてNo.09278
kazu-ma さん 20/12/31 22:06 [ コメントを投稿する ]
  お世話になります。

秀丸エディタのマクロ runex 文を使って Windows 10 の WSL の標準出力を取得しようとしているのですが、どうも意図したように取得できません。
標準出力が長い(出力文字数が多い?)場合にそのすべてを取得することができないことがあるようです(取得できることもある?)。

例えば、以下のような簡単なマクロになります。


runex "wsl ls -l /usr/bin"
    , 1     //sync   0:async, 1:sync
    , 0, "" //stdin  0:none, 1:auto, 2:<file, 3:(reserved),
            //       4:current content, 5:selection
    , 1, "" //stdout 0:none, 1:auto, 2:>file 3:>>file, 4:new window,
            //       5:insert, 6:replace, 7:>output pane, 8:>>output pane
    , 0, "" //stderr 0:none, 1:auto or >>stdout, 2-8:same as stdout's param
    , 0, "" //folder 0:none, 1:current, 2:specify 3:(reserved), 4:exe's
    , 1     //show   0:auto, 1:show, 2:hide, 3-13:ShellExecute()'s SW_*
    , 1     //draw   0:draw, 1:no draw when stdout redirected
    , 6     //encode 0:ansi, 2:utf-16, 6:utf-8
    , 0     //extended flags
;

標準出力先を 2:>file にしてみたり、他の出力先へ変更してみたりしましたが、うまくいかないようです。

確実に出力を取得するパラメータや方法はないでしょうか?
情報があれば

ちなみに、2台のPCで同じ状況を確認しました。

OS : Windows10 Pro 64bit 1909 / 20H2
WSL : Ubuntu 18.04 LTS
秀丸エディタ v8.95 64bit版

よろしくお願いします。
[ ]
RE:09278 WSL 出力の取得についてNo.09279
秀丸担当 さん 21/01/05 09:41 [ コメントを投稿する ]
 
WSL2でUbuntuを入れて試してみたところでは、一応(?)問題無くできるようでした。
Windows 10 Version 1909、WSL2、Ubuntu 18.04 LTSで試してみました。
インストール直後の状態で、「wsl ls -l /usr/bin」では、708行の内容が出力されました。

もし何らかの問題があるとして、cmdを経由すると変化する可能性もあると思います。
例えば、コマンドプロンプトや[その他]→[プログラム実行...]では
cmd.exe /c "wsl ls -l /usr/bin"
とします。
runexのパラメータでは
runex "cmd.exe /c \"wsl ls -l /usr/bin\""
といった感じです。

同じ問題かわからないですが、正常ではないと思われるようなこともありました。
日本語化した「wsl man ls」の出力は、「名前」とか「書式」の部分が「名」とか「書」といったように一文字で切れるようです。
秀丸エディタを使わず、コマンドプロンプトだけで「cmd.exe /c "wsl man ls" >c:\folder\test.txt」としても同じように切れたので、wslの標準出力に何かしらの問題があるようです。
[ ]
RE:09279 WSL 出力の取得についてNo.09280
kazu-ma さん 21/01/05 11:57 [ コメントを投稿する ]
  お世話になります。

確認と情報をありがとうございます。

>WSL2でUbuntuを入れて試してみたところでは、一応(?)問題無くできるようでした。

そう言えば、自分の環境は WSL v1 だったな...
ということで v1 の Ubuntu 環境を WSL export/import で複製し、WSL v2 に変更して試してみました。
結果としてはこちらでも v2 では問題なく取得できました。

その後、v1 と v2 を切り替えながら何度か試してみましたが、残念ながら v1 では相変わらず駄目なようです。
cmd.exe を経由する方法を v1 でも試してみましたが、これも駄目なようでした。

どうやら WSL のバージョンが関係するようだということが言えるかと思いますので、これはこれで今後どうするか考えたいと思います。

どうもありがとうございました。
[ ]
RE:09280 WSL 出力の取得についてNo.09281
秀丸担当 さん 21/01/05 13:09 [ コメントを投稿する ]
 
WSL v1に切り替えてみたところ、確かに言われている通りに切れることが確認できました。
コマンドプロンプトとPowerShellは大丈夫でした。

Visual Studioでも外部ツールにコマンドを登録して出力ウィンドウに出せますが、Visual Studioでも切れるようでした。
PowerShell ISEというGUI版のPowerShellでも切れるようでした。
どうも、なぜかGUIがあるとそうなってしまうような問題がWSL1にはあるような感じのようでした。

Visual StudioもPowerShell ISEも、WSL2にすると大丈夫なようです。
[ ]
RE:09281 WSL 出力の取得についてNo.09282
kazu-ma さん 21/01/05 15:33 [ コメントを投稿する ]
  お世話になります。

情報ありがとうございます。

今回はコマンドプロンプトや PowerShell 単体での動作確認は行ったものの、他の GUI アプリを使ったケースについては思い至らず試していませんでした。
もしかして runex 文の使い方を間違えているのかと思い込んでしまいました。

お騒がせ&お手数おかけして申し訳ありませんでした。
ありがとうございました。
[ ]

[ 新規に投稿する ]