1

スクリプトを実行して、結果をコンソールに出力しようとしています。動作しますが、

私が今直面している小さな問題。「スクリプト」ファイルの書き込み/コーディングが間違っていると、次のような出力が出力されます。

 syntax error, unexpected $undefined, expecting $end puts

これは、スクリプトファイル内のコードに何か問題があることを教えてくれるのは非常に良いことですが、私のコード行では次のようになっています。

printf("%s", path);

それは私にそれを印刷しません、そして私はそれを私がスクリーンに表示できるようにそれを印刷したいです。私を助けてください

 fp = popen("our script...is here", "r");
    if (fp == NULL)
        /* Handle error */;


    while (fgets(path, PATH_MAX, fp) != NULL)
        printf("%s", path);


    status = pclose(fp);

追伸:明確にするために、私はxcodeを使用しており、CまたはC++のコードを気にしないでください

4

2 に答える 2

1

stderr に注意する必要があります - popen()stdout のみを処理します:

逆に、「ポップされた」ストリームから読み取ると、コマンドの標準出力が読み取られます。

シェル エラーは stderr に出力されますが、これは popen() では処理されません。

于 2012-12-26T15:05:45.153 に答える
1

デフォルトfgets()では、ストリームの stdout からのみ読み取ります。をキャプチャするstderrには、次のようにリダイレクトするだけですstdout

 fp = popen("./script 2>&1", "r");

これで、stdout と stderr の両方が stdout になり、C コードから読み取ることができます。

上記のようにリダイレクトすると、stdout と stderr を区別する方法がないことに注意してください。

于 2012-12-26T15:12:40.797 に答える