system()を介した外部プログラムの実行が正しく実行されません

StackOverflow https://stackoverflow.com/questions/1612451

  •  06-07-2019
  •  | 
  •  

質問

system()呼び出しでコマンドを呼び出して、コードからプログラム(ncbi blast、知る必要がある人向け)を呼び出そうとしています。

シェルで文字列を直接実行すると、意図したとおりに動作しますが、system()を介して同じ文字列を試行すると、プログラムは意図した結果を返さずにはるかに高速に戻ります。出力ファイルは作成されますが、ファイルサイズは0です。返されるエラーコードも0です。"> output.log 2> error.log"しかし、これらのファイルは作成されません。

環境変数またはパスと関係があると思います...

出力ファイル名は、出力リダイレクトではなく、-oコマンドラインパラメーターで指定されます。

popenコマンドがユースケースにより適している可能性があることを読みましたが、見つかりません。どのライブラリのライブラリですか?

役に立ちましたか?

解決

このような問題の最も一般的な原因は、〜/ .bashrc の環境変数設定が正しくないことです。

実行すると、 ncbi の不満を確認できます

$SHELL -c '<exact string you pass to system()>'

これをデバッグするもう1つの一般的な方法は、 strace を使用することです。実行:

strace -fo /tmp/strace.out ./myProgram

そして /tmp/strace.out で手がかりを探します。

他のヒント

fork exec をしたくない理由はありますか?これは、あるプロセスを別のプロセスから実行するための一般的なイディオムです。

popenは標準Cライブラリにあります manページを見る

いくつかの簡単な質問:

  • シェルでどのように実行しますか?
  • システムコマンドでどのように実行しますか?
  • システムから返される値は何ですか?

ターミナルからの正確なコピーと貼り付けは、英語の説明よりも望ましいです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top