2016-12-03 4 views
0

win7 x64でActiveState perl 5を実行しています。ソリューションはクロスプラットフォームである必要はありません。外部アプリケーションを実行して終了する

私は、Perlスクリプトを使用して、複雑で可変なコマンドライン引数文字列を別のアプリケーション用に作成しようとしています。次に、Perlスクリプトを直ちに終了しながら、引数文字列を使用してその外部アプリケーションを実行したいとします。

考えられるのは、適切なコマンドラインを生成し、外部アプリケーションを生成し(適切な引数を与えて)、直ちに遠ざかるように、さまざまな引数を使ってPerlスクリプトを実行するショートカットアイコンを作成することです。

私はこれを行う方法を見つけることができないようです。 exec()を使用して、コマンドラインウィンドウからスクリプトを実行すると(外部アプリケーションを起動した直後にコマンドプロンプトに戻ります)、同じコマンドを使用してWindowsショートカットを作成すると、Perlスクリプトがちょうどハングしますスポーンされた外部アプリが終了するか、perlコマンドウィンドウを手動で閉じるまで、バックグラウンドは永遠に残っています。

これを行う方法はありますか?私はsystemexec、バックチック、他のいくつかの不明なものを試しました。何も働いていません。

+1

'perldoc -f exec'または多分[Win32 :: Process](https://metacpan.org/pod/Win32::Process) –

+1

私が言及したように、すでにexecを試しました。しかし、Win32 :: Processを試していなかった - それはトリックでした、ありがとう! – tstevens

+0

あなたは 'exec" start => @ cmdline "'を使って同じ結果を得ることができたかもしれませんが、コードを表示しないので、何もするつもりはありません。 –

答えて

0

execがWindowsに存在しません。

systemまたはreadpipe(backticksとも呼ばれます)を使用すると、Perlは子プロセスが終了するまで(アイドル状態になりますが)、引き続き実行されます。

Win32::Processまたはsystem('start "" ...')が必要です。

+0

はい、Win32 :: Processが解決策でした。 – tstevens

関連する問題