1

私は元々、次のコマンドを使用してExpectから実行可能ファイル()を実行しようとしましたtftpd32.exeが、何らかの理由でスクリプト全体がハングしました。

exec c:/tftpd32.351/tftpd32.exe

そこで、実行可能ファイルを起動するバッチファイルを呼び出すことにしました。

次のコマンドでバッチファイルを呼び出そうとしましたが、Windowsがファイルを見つけられないというエラーメッセージが表示されます。

exec c:/tftpd32.351/start_tftp.bat

次のことも試しましたが、実行可能ファイルが起動しません。

spwan cmd.exe /c c:/tftpd32.351/start_tftp.bat

バッチファイルにはこれが含まれており、ダブルクリックすると正常に実行されます。

start tftpd32.exe

どんな助けでも大歓迎です。

ありがとう

4

1 に答える 1

1

Tclからそのプログラムを実行する正しい方法は次のとおりです。

set tftpd "c:/tftpd32.351/tftpd32.exe"
exec {*}[auto_execok start] "" [file nativename $tftpd]

使用するときは常に余分な空の引数を使用する必要があることに注意してくださいstart(動作が奇妙なためstart、作成するウィンドウタイトルを指定するオプションの文字列が引用符で囲まれていますが、最初に引用符で囲まれた文字列をそのように誤解する傾向があります必須の引数はありません)、実行するには実行可能ファイルのネイティブシステム名を使用する必要があるため、file nativename

プログラム内に古いバージョンのTcl expect(8.4以前)がある場合は、代わりにこれを行います。

set tftpd "c:/tftpd32.351/tftpd32.exe"
eval exec [auto_execok start] [list "" [file nativename $tftpd]]

そのlist奇妙な構造のコマンドは、eval exec他の方法では生成するのに問題があるであろういくつかの必要な引用を追加します。上記とまったく同じように使用しないと、非常に奇妙なエラーが発生します。(または、コード体操をほとんど必要としないものにアップグレードします。{*}構文は正当な理由で追加されました!)

于 2012-06-26T09:54:31.477 に答える