Qtで複雑なLinuxコマンドを実行する方法は?

ネジャート:

Linuxでを使用してコマンドを実行し、コンピュータを再起動したいQProcessアプリケーションにrootパスワードをハードコーディングしました。

端末で以下を実行すると、完璧に機能します。

echo myPass | sudo -S shutdown -r now 

コマンドをシェルスクリプトに入れてそれを介しQProcess呼び出すことも成功します:

QProcess process;
process.startDetached("/bin/sh", QStringList()<< "myScript.sh");

しかし、私は直接に渡してそれを実行することはできませんQProcess

process.startDetached("echo myPass | sudo -S shutdown -r now ");

印刷するだけです myPass | sudo -S shutdown -r now

このような比較的複雑なコマンドをを使用して直接実行する方法はありますかQProcess(シェルスクリプトを配置しない)。

lpapp:

で確立されたこの目的のために存在する主要な方法QProcess

void QProcess :: setProcessChannelMode(ProcessChannelMode mode)

そして

void QProcess :: setStandardOutputProcess(QProcess *宛先)

したがって、次のコードスニペットは、command1 | command2インタープリターに制限されない同等のコードになります

QProcess process1
QProcess process2;

process1.setStandardOutputProcess(&process2);

process1.start("echo myPass");
process2.start("sudo -S shutdown -r now");
process2.setProcessChannelMode(QProcess::ForwardedChannels);

// Wait for it to start
if(!process1.waitForStarted())
    return 0;

bool retval = false;
QByteArray buffer;
// To be fair: you only need to wait here for a bit with shutdown,
// but I will still leave the rest here for a generic solution
while ((retval = process2.waitForFinished()));
    buffer.append(process2.readAll());

if (!retval) {
    qDebug() << "Process 2 error:" << process2.errorString();
    return 1;
}

sudo -Sこの小さなプログラムをrootとして実行し、権限を設定できるため一部を削除できます。シャットダウンプログラムにsetuidまたはsetcapを設定することもできます。

商用Linuxシステムを構築するときに通常行うことは、実行しようとしているアクティビティのsetuidまたはsetcapを取得できる最小限のアプリケーションを用意することであり、それをLinux system(3)またはQProcessLinux上で明示的に呼び出します基本的に、

次のように、悪意のある使用に対するアクセス権を制限するために、アプリケーション全体に完全なルートアクセス権を与えないように、その小さなアプリケーションを記述します。

sudo chmod u+s /path/to/my/application

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ssh上で複雑なコマンドラインを実行する方法は?

分類Dev

ノードjsスポーンで複雑なコマンドを実行する方法は?

分類Dev

Pythonで複雑なコマンドラインを実行する

分類Dev

Pythonシェルでbashの複雑なfindコマンドを実行する

分類Dev

1行で複数のコマンドを実行する方法は?

分類Dev

1行で複数のコマンドを実行する方法

分類Dev

コマンドをsshでラップする:複雑な引用符を管理する方法は?

分類Dev

Pythonスクリプトで高度なLinuxコマンドを実行する方法

分類Dev

WebでLinuxコマンドを実行する方法はありますか?

分類Dev

STARTコマンドで複数のコマンドを実行する方法

分類Dev

PythonスクリプトでLinux(ubuntu)コマンドを実行する方法は?

分類Dev

Linuxのターミナルで実行可能なコマンドをループする方法は?

分類Dev

Qt4からLinuxコマンドを実行する

分類Dev

Linux rpathで実行可能な場所をエンコードする方法は?

分類Dev

python + pythonスクリプトを介して複雑なシェルコマンドを実行する

分類Dev

コマンドからではなく、mavenコマンドを自動的に実行する方法は?

分類Dev

Golangで簡単なWindowsコマンドを実行する方法は?

分類Dev

AndroidでUSSDコマンドを実行する方法は?

分類Dev

sudoで2つのコマンドを実行する方法は?

分類Dev

RでPowerShellコマンドを実行する方法は?

分類Dev

ラバでmongodbrunコマンドを実行する方法は?

分類Dev

ammonite REPL / SHELLでScalaREPLコマンドを実行する方法は?

分類Dev

nodeJSで連鎖コマンドを実行する方法は?

分類Dev

Dockerfileで2つのコマンドを実行する方法は?

分類Dev

Dockerfile:CPでサブコマンドを実行する方法は?

分類Dev

Javaで複雑な文字列のコレクション(リスト、マップ?)を実装する方法?

分類Dev

複雑な方程式で数を千コンマで区切る簡単な方法はありますか?

分類Dev

Bashで複数のコマンドをsshして実行する最もクリーンな方法は何ですか?

分類Dev

exec.Commandで複数のコマンドを実行する方法はありますか?

Related 関連記事

  1. 1

    ssh上で複雑なコマンドラインを実行する方法は?

  2. 2

    ノードjsスポーンで複雑なコマンドを実行する方法は?

  3. 3

    Pythonで複雑なコマンドラインを実行する

  4. 4

    Pythonシェルでbashの複雑なfindコマンドを実行する

  5. 5

    1行で複数のコマンドを実行する方法は?

  6. 6

    1行で複数のコマンドを実行する方法

  7. 7

    コマンドをsshでラップする:複雑な引用符を管理する方法は?

  8. 8

    Pythonスクリプトで高度なLinuxコマンドを実行する方法

  9. 9

    WebでLinuxコマンドを実行する方法はありますか?

  10. 10

    STARTコマンドで複数のコマンドを実行する方法

  11. 11

    PythonスクリプトでLinux(ubuntu)コマンドを実行する方法は?

  12. 12

    Linuxのターミナルで実行可能なコマンドをループする方法は?

  13. 13

    Qt4からLinuxコマンドを実行する

  14. 14

    Linux rpathで実行可能な場所をエンコードする方法は?

  15. 15

    python + pythonスクリプトを介して複雑なシェルコマンドを実行する

  16. 16

    コマンドからではなく、mavenコマンドを自動的に実行する方法は?

  17. 17

    Golangで簡単なWindowsコマンドを実行する方法は?

  18. 18

    AndroidでUSSDコマンドを実行する方法は?

  19. 19

    sudoで2つのコマンドを実行する方法は?

  20. 20

    RでPowerShellコマンドを実行する方法は?

  21. 21

    ラバでmongodbrunコマンドを実行する方法は?

  22. 22

    ammonite REPL / SHELLでScalaREPLコマンドを実行する方法は?

  23. 23

    nodeJSで連鎖コマンドを実行する方法は?

  24. 24

    Dockerfileで2つのコマンドを実行する方法は?

  25. 25

    Dockerfile:CPでサブコマンドを実行する方法は?

  26. 26

    Javaで複雑な文字列のコレクション(リスト、マップ?)を実装する方法?

  27. 27

    複雑な方程式で数を千コンマで区切る簡単な方法はありますか?

  28. 28

    Bashで複数のコマンドをsshして実行する最もクリーンな方法は何ですか?

  29. 29

    exec.Commandで複数のコマンドを実行する方法はありますか?

ホットタグ

アーカイブ