Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. request about scp command (QProcess) using qt
Forum Updated to NodeBB v4.3 + New Features

request about scp command (QProcess) using qt

Scheduled Pinned Locked Moved Unsolved General and Desktop
29 Posts 4 Posters 5.4k Views 2 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • H hlowd
    7 Nov 2023, 23:00

    @JonB
    hello.

    In the actual code, I entered two backslashes.

    Additionally, by using the exeexcute function rather than the start function, no additional parameters were entered, and a response was received immediately.

    Only the scp command did not work.

    H Offline
    H Offline
    hlowd
    wrote on 8 Nov 2023, 06:49 last edited by hlowd 11 Aug 2023, 06:58
    #7

    @hlowd

    This is the original source code.
    What's wrong?

    ps) I added two backslashes to the content, but only one is visible.

    //-----------------------------------
    // header
    //-----------------------------------
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H

    #include <QMainWindow>
    #include <QProcess>

    QT_BEGIN_NAMESPACE
    namespace Ui { class MainWindow; }
    QT_END_NAMESPACE

    class MainWindow : public QMainWindow
    {
    Q_OBJECT

    public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    QProcess *m_process;

    private slots:
    void on_pushButton_clicked();
    void readOutput();

    private:
    Ui::MainWindow *ui;
    };
    #endif // MAINWINDOW_H

    //----------------------------------------
    //cpp
    //-----------------------------------------
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <qDebug>

    MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
    {
    ui->setupUi(this);
    }

    MainWindow::~MainWindow()
    {
    delete ui;
    }

    void MainWindow::on_pushButton_clicked()
    {
    m_process = new QProcess(this);
    QStringList listArguments;

    #if 0
    QString strParam = "scp";
    listArguments << "D:\SVN\Work\test\a.ini user@192.168.1.250:\home\user\SW\";
    #else
    QString strParam = "ipconfig";
    listArguments << "/all";
    #endif
    connect(m_process, SIGNAL(readyReadStandardError()), this, SLOT(readOutput()));
    connect(m_process, SIGNAL(readyReadStandardOutput()), this, SLOT(readOutput()));
    connect(m_process, SIGNAL(errorOccurred()), this, SLOT(readOutput()));

    m_process->start(strParam, listArguments);
    m_process->waitForFinished();
    
    if(m_process)
        delete m_process;
    

    }

    void MainWindow::readOutput()
    {
    QString StdOut = m_process->readAllStandardOutput();
    QString StdError = m_process->readAllStandardError();
    QString StdError1 = m_process->errorString();
    qDebug() << "======================================\n";
    qDebug() << StdOut;
    qDebug() << StdError;
    qDebug() << StdError1;
    qDebug() << "======================================\n";
    }

    J H 2 Replies Last reply 8 Nov 2023, 06:54
    0
    • H hlowd
      8 Nov 2023, 06:49

      @hlowd

      This is the original source code.
      What's wrong?

      ps) I added two backslashes to the content, but only one is visible.

      //-----------------------------------
      // header
      //-----------------------------------
      #ifndef MAINWINDOW_H
      #define MAINWINDOW_H

      #include <QMainWindow>
      #include <QProcess>

      QT_BEGIN_NAMESPACE
      namespace Ui { class MainWindow; }
      QT_END_NAMESPACE

      class MainWindow : public QMainWindow
      {
      Q_OBJECT

      public:
      MainWindow(QWidget *parent = nullptr);
      ~MainWindow();
      QProcess *m_process;

      private slots:
      void on_pushButton_clicked();
      void readOutput();

      private:
      Ui::MainWindow *ui;
      };
      #endif // MAINWINDOW_H

      //----------------------------------------
      //cpp
      //-----------------------------------------
      #include "mainwindow.h"
      #include "ui_mainwindow.h"
      #include <qDebug>

      MainWindow::MainWindow(QWidget *parent)
      : QMainWindow(parent)
      , ui(new Ui::MainWindow)
      {
      ui->setupUi(this);
      }

      MainWindow::~MainWindow()
      {
      delete ui;
      }

      void MainWindow::on_pushButton_clicked()
      {
      m_process = new QProcess(this);
      QStringList listArguments;

      #if 0
      QString strParam = "scp";
      listArguments << "D:\SVN\Work\test\a.ini user@192.168.1.250:\home\user\SW\";
      #else
      QString strParam = "ipconfig";
      listArguments << "/all";
      #endif
      connect(m_process, SIGNAL(readyReadStandardError()), this, SLOT(readOutput()));
      connect(m_process, SIGNAL(readyReadStandardOutput()), this, SLOT(readOutput()));
      connect(m_process, SIGNAL(errorOccurred()), this, SLOT(readOutput()));

      m_process->start(strParam, listArguments);
      m_process->waitForFinished();
      
      if(m_process)
          delete m_process;
      

      }

      void MainWindow::readOutput()
      {
      QString StdOut = m_process->readAllStandardOutput();
      QString StdError = m_process->readAllStandardError();
      QString StdError1 = m_process->errorString();
      qDebug() << "======================================\n";
      qDebug() << StdOut;
      qDebug() << StdError;
      qDebug() << StdError1;
      qDebug() << "======================================\n";
      }

      J Offline
      J Offline
      jsulm
      Lifetime Qt Champion
      wrote on 8 Nov 2023, 06:54 last edited by
      #8

      @hlowd said in request about scp command (QProcess) using qt:

      listArguments << "D:\SVN\Work\test\a.ini user@192.168.1.250:\home\user\SW";

      Is this really your real code?!
      You again have single back-slashes.
      And why do you use back-slashes for paths on Linux side?
      Also that line should be:

      listArguments << "D:\\SVN\\Work\\test\\a.ini" <<  "user@192.168.1.250:/home/user/SW/";
      

      And please format you code properly.

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      1
      • H hlowd
        8 Nov 2023, 06:49

        @hlowd

        This is the original source code.
        What's wrong?

        ps) I added two backslashes to the content, but only one is visible.

        //-----------------------------------
        // header
        //-----------------------------------
        #ifndef MAINWINDOW_H
        #define MAINWINDOW_H

        #include <QMainWindow>
        #include <QProcess>

        QT_BEGIN_NAMESPACE
        namespace Ui { class MainWindow; }
        QT_END_NAMESPACE

        class MainWindow : public QMainWindow
        {
        Q_OBJECT

        public:
        MainWindow(QWidget *parent = nullptr);
        ~MainWindow();
        QProcess *m_process;

        private slots:
        void on_pushButton_clicked();
        void readOutput();

        private:
        Ui::MainWindow *ui;
        };
        #endif // MAINWINDOW_H

        //----------------------------------------
        //cpp
        //-----------------------------------------
        #include "mainwindow.h"
        #include "ui_mainwindow.h"
        #include <qDebug>

        MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
        {
        ui->setupUi(this);
        }

        MainWindow::~MainWindow()
        {
        delete ui;
        }

        void MainWindow::on_pushButton_clicked()
        {
        m_process = new QProcess(this);
        QStringList listArguments;

        #if 0
        QString strParam = "scp";
        listArguments << "D:\SVN\Work\test\a.ini user@192.168.1.250:\home\user\SW\";
        #else
        QString strParam = "ipconfig";
        listArguments << "/all";
        #endif
        connect(m_process, SIGNAL(readyReadStandardError()), this, SLOT(readOutput()));
        connect(m_process, SIGNAL(readyReadStandardOutput()), this, SLOT(readOutput()));
        connect(m_process, SIGNAL(errorOccurred()), this, SLOT(readOutput()));

        m_process->start(strParam, listArguments);
        m_process->waitForFinished();
        
        if(m_process)
            delete m_process;
        

        }

        void MainWindow::readOutput()
        {
        QString StdOut = m_process->readAllStandardOutput();
        QString StdError = m_process->readAllStandardError();
        QString StdError1 = m_process->errorString();
        qDebug() << "======================================\n";
        qDebug() << StdOut;
        qDebug() << StdError;
        qDebug() << StdError1;
        qDebug() << "======================================\n";
        }

        H Offline
        H Offline
        hlowd
        wrote on 8 Nov 2023, 06:59 last edited by
        #9

        @hlowd

        I entered two words in the post, but only one is displayed on the screen...

        J H 2 Replies Last reply 8 Nov 2023, 07:01
        0
        • H hlowd
          8 Nov 2023, 06:59

          @hlowd

          I entered two words in the post, but only one is displayed on the screen...

          J Offline
          J Offline
          jsulm
          Lifetime Qt Champion
          wrote on 8 Nov 2023, 07:01 last edited by
          #10

          @hlowd said in request about scp command (QProcess) using qt:

          I entered two words in the post, but only one is displayed on the screen...

          Use code tags properly, then it will be shown correctly

          https://forum.qt.io/topic/113070/qt-code-of-conduct

          1 Reply Last reply
          0
          • H hlowd
            8 Nov 2023, 06:59

            @hlowd

            I entered two words in the post, but only one is displayed on the screen...

            H Offline
            H Offline
            hlowd
            wrote on 8 Nov 2023, 07:09 last edited by
            #11

            @hlowd

            listArguments << "D:\\SVN\\Work\\test\\a.ini" << "user@192.168.1.250:/home/user/SW/";

            Even though I entered it like this, it is the same.
            The response from start comes immediately, but the readOutput function is not called.

            J H 2 Replies Last reply 8 Nov 2023, 07:12
            0
            • H hlowd
              8 Nov 2023, 07:09

              @hlowd

              listArguments << "D:\\SVN\\Work\\test\\a.ini" << "user@192.168.1.250:/home/user/SW/";

              Even though I entered it like this, it is the same.
              The response from start comes immediately, but the readOutput function is not called.

              J Offline
              J Offline
              jsulm
              Lifetime Qt Champion
              wrote on 8 Nov 2023, 07:12 last edited by
              #12

              @hlowd said in request about scp command (QProcess) using qt:

              but the readOutput function is not called

              Probably because you're deleting m_process right after waitForFinished.
              Are you sure scp.exe command is found?
              Try with an absolute path to scp.exe to make sure it is actually found.

              https://forum.qt.io/topic/113070/qt-code-of-conduct

              1 Reply Last reply
              0
              • H hlowd
                8 Nov 2023, 07:09

                @hlowd

                listArguments << "D:\\SVN\\Work\\test\\a.ini" << "user@192.168.1.250:/home/user/SW/";

                Even though I entered it like this, it is the same.
                The response from start comes immediately, but the readOutput function is not called.

                H Offline
                H Offline
                hlowd
                wrote on 8 Nov 2023, 07:28 last edited by
                #13

                @hlowd

                The symptom is the same even if delete is not called.

                If it is a command instruction rather than a code, the instruction will be executed normally.
                The file is moved normally. (Windows -> Linux)

                J H 2 Replies Last reply 8 Nov 2023, 07:32
                0
                • H hlowd
                  8 Nov 2023, 07:28

                  @hlowd

                  The symptom is the same even if delete is not called.

                  If it is a command instruction rather than a code, the instruction will be executed normally.
                  The file is moved normally. (Windows -> Linux)

                  J Offline
                  J Offline
                  jsulm
                  Lifetime Qt Champion
                  wrote on 8 Nov 2023, 07:32 last edited by
                  #14

                  @hlowd Again: try with absolute path to scp.exe

                  https://forum.qt.io/topic/113070/qt-code-of-conduct

                  1 Reply Last reply
                  0
                  • H hlowd
                    8 Nov 2023, 07:28

                    @hlowd

                    The symptom is the same even if delete is not called.

                    If it is a command instruction rather than a code, the instruction will be executed normally.
                    The file is moved normally. (Windows -> Linux)

                    H Offline
                    H Offline
                    hlowd
                    wrote on 8 Nov 2023, 07:44 last edited by hlowd 11 Aug 2023, 07:56
                    #15

                    @hlowd
                    There are files in that path.

                    C:\Windows\WinSxS\amd64_openssh-common-components-onecore_31bf3856ad364e35_10.0.22621.1_none_1e3c4880a37d88bb
                    
                    scp.exe
                    ssh-add.exe
                    ssh-agent.exe
                    ssh-keygen.exe
                    

                    // new code

                    QString strParam = "C:\\Windows\\WinSxS\\amd64_openssh-common-components-onecore_31bf3856ad364e35_10.0.22621.1_none_1e3c4880a37d88bb\\scp.exe";
                    

                    // error message

                    "CreateProcessW failed error:2 posix_spawn: No such file or directory"
                    
                    J J 2 Replies Last reply 8 Nov 2023, 07:49
                    0
                    • H hlowd
                      8 Nov 2023, 07:44

                      @hlowd
                      There are files in that path.

                      C:\Windows\WinSxS\amd64_openssh-common-components-onecore_31bf3856ad364e35_10.0.22621.1_none_1e3c4880a37d88bb
                      
                      scp.exe
                      ssh-add.exe
                      ssh-agent.exe
                      ssh-keygen.exe
                      

                      // new code

                      QString strParam = "C:\\Windows\\WinSxS\\amd64_openssh-common-components-onecore_31bf3856ad364e35_10.0.22621.1_none_1e3c4880a37d88bb\\scp.exe";
                      

                      // error message

                      "CreateProcessW failed error:2 posix_spawn: No such file or directory"
                      
                      J Offline
                      J Offline
                      JonB
                      wrote on 8 Nov 2023, 07:49 last edited by JonB 11 Aug 2023, 07:51
                      #16

                      @hlowd
                      If you want help on this, at least for my part, please make the effort to enclose your code blocks and literal extracts in the forums block quotes (</> button) as we have asked several times. It does not require much effort on your side.

                      By now you should be trying a command of scp, nothing else, no arguments, to verify that (a) it is found and can be run and (b) you can successfully read any output from it, e.g. presumably a "usage" message in this case.

                      1 Reply Last reply
                      0
                      • H hlowd
                        8 Nov 2023, 07:44

                        @hlowd
                        There are files in that path.

                        C:\Windows\WinSxS\amd64_openssh-common-components-onecore_31bf3856ad364e35_10.0.22621.1_none_1e3c4880a37d88bb
                        
                        scp.exe
                        ssh-add.exe
                        ssh-agent.exe
                        ssh-keygen.exe
                        

                        // new code

                        QString strParam = "C:\\Windows\\WinSxS\\amd64_openssh-common-components-onecore_31bf3856ad364e35_10.0.22621.1_none_1e3c4880a37d88bb\\scp.exe";
                        

                        // error message

                        "CreateProcessW failed error:2 posix_spawn: No such file or directory"
                        
                        J Offline
                        J Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on 8 Nov 2023, 07:51 last edited by
                        #17

                        @hlowd said in request about scp command (QProcess) using qt:

                        Can I do it this way?

                        Yes, just try.
                        I would also execute scp using this absolute path in a terminal to make sure it works.

                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                        H 1 Reply Last reply 8 Nov 2023, 08:00
                        0
                        • J jsulm
                          8 Nov 2023, 07:51

                          @hlowd said in request about scp command (QProcess) using qt:

                          Can I do it this way?

                          Yes, just try.
                          I would also execute scp using this absolute path in a terminal to make sure it works.

                          H Offline
                          H Offline
                          hlowd
                          wrote on 8 Nov 2023, 08:00 last edited by
                          #18

                          @jsulm

                          There are files in that path.

                          C:\Windows\WinSxS\amd64_openssh-common-components-onecore_31bf3856ad364e35_10.0.22621.1_none_1e3c4880a37d88bb
                          
                          scp.exe
                          ssh-add.exe
                          ssh-agent.exe
                          ssh-keygen.exe
                          

                          // new code

                          QString strParam = "C:\\Windows\\WinSxS\\amd64_openssh-common-components-onecore_31bf3856ad364e35_10.0.22621.1_none_1e3c4880a37d88bb\\scp.exe";
                          

                          // error message

                          "CreateProcessW failed error:2 posix_spawn: No such file or directory"
                          

                          The same error occurs in the command prompt.

                          J J 2 Replies Last reply 8 Nov 2023, 08:10
                          0
                          • H hlowd
                            8 Nov 2023, 08:00

                            @jsulm

                            There are files in that path.

                            C:\Windows\WinSxS\amd64_openssh-common-components-onecore_31bf3856ad364e35_10.0.22621.1_none_1e3c4880a37d88bb
                            
                            scp.exe
                            ssh-add.exe
                            ssh-agent.exe
                            ssh-keygen.exe
                            

                            // new code

                            QString strParam = "C:\\Windows\\WinSxS\\amd64_openssh-common-components-onecore_31bf3856ad364e35_10.0.22621.1_none_1e3c4880a37d88bb\\scp.exe";
                            

                            // error message

                            "CreateProcessW failed error:2 posix_spawn: No such file or directory"
                            

                            The same error occurs in the command prompt.

                            J Offline
                            J Offline
                            JonB
                            wrote on 8 Nov 2023, 08:10 last edited by
                            #19

                            @hlowd
                            I am not a total Windows expert, but I did not think you should ever attempt to run anything in the WinSxS area? You should be running the scp which is on your PATH (presumably).

                            1 Reply Last reply
                            0
                            • H hlowd
                              8 Nov 2023, 08:00

                              @jsulm

                              There are files in that path.

                              C:\Windows\WinSxS\amd64_openssh-common-components-onecore_31bf3856ad364e35_10.0.22621.1_none_1e3c4880a37d88bb
                              
                              scp.exe
                              ssh-add.exe
                              ssh-agent.exe
                              ssh-keygen.exe
                              

                              // new code

                              QString strParam = "C:\\Windows\\WinSxS\\amd64_openssh-common-components-onecore_31bf3856ad364e35_10.0.22621.1_none_1e3c4880a37d88bb\\scp.exe";
                              

                              // error message

                              "CreateProcessW failed error:2 posix_spawn: No such file or directory"
                              

                              The same error occurs in the command prompt.

                              J Offline
                              J Offline
                              jsulm
                              Lifetime Qt Champion
                              wrote on 8 Nov 2023, 08:12 last edited by
                              #20

                              @hlowd Did scp executable ever work for you in terminal? The path where it is located looks strange, don't know from where it comes. On my machine I have it here: c:\windows\System32\OpenSSH\scp.exe

                              You can check where your scp.exe is located using this command:

                              where scp
                              

                              https://forum.qt.io/topic/113070/qt-code-of-conduct

                              H 1 Reply Last reply 8 Nov 2023, 08:25
                              2
                              • J jsulm
                                8 Nov 2023, 08:12

                                @hlowd Did scp executable ever work for you in terminal? The path where it is located looks strange, don't know from where it comes. On my machine I have it here: c:\windows\System32\OpenSSH\scp.exe

                                You can check where your scp.exe is located using this command:

                                where scp
                                
                                H Offline
                                H Offline
                                hlowd
                                wrote on 8 Nov 2023, 08:25 last edited by
                                #21

                                @jsulm

                                The scp.exe file exists in that path.

                                C:\Windows\System32\OpenSSH
                                

                                I don't know why I couldn't find it using Explorer search.

                                J 1 Reply Last reply 8 Nov 2023, 09:13
                                0
                                • H hlowd
                                  8 Nov 2023, 08:25

                                  @jsulm

                                  The scp.exe file exists in that path.

                                  C:\Windows\System32\OpenSSH
                                  

                                  I don't know why I couldn't find it using Explorer search.

                                  J Offline
                                  J Offline
                                  jsulm
                                  Lifetime Qt Champion
                                  wrote on 8 Nov 2023, 09:13 last edited by
                                  #22

                                  @hlowd said in request about scp command (QProcess) using qt:

                                  The scp.exe file exists in that path

                                  Does it work with this path?

                                  https://forum.qt.io/topic/113070/qt-code-of-conduct

                                  H 1 Reply Last reply 15 Nov 2023, 08:10
                                  0
                                  • J jsulm
                                    8 Nov 2023, 09:13

                                    @hlowd said in request about scp command (QProcess) using qt:

                                    The scp.exe file exists in that path

                                    Does it work with this path?

                                    H Offline
                                    H Offline
                                    hlowd
                                    wrote on 15 Nov 2023, 08:10 last edited by
                                    #23
                                    This post is deleted!
                                    1 Reply Last reply
                                    0
                                    • H Offline
                                      H Offline
                                      hlowd
                                      wrote on 15 Nov 2023, 23:03 last edited by hlowd
                                      #24

                                      @jsulm
                                      No, it doesn't work..

                                      J 1 Reply Last reply 16 Nov 2023, 09:04
                                      0
                                      • H hlowd
                                        15 Nov 2023, 23:03

                                        @jsulm
                                        No, it doesn't work..

                                        J Offline
                                        J Offline
                                        JonB
                                        wrote on 16 Nov 2023, 09:04 last edited by
                                        #25

                                        @hlowd
                                        This really should not be too difficult to diagnose, if you stick to what is suggested and report behaviour.

                                        First try both of

                                        scp
                                        \full\path\to\scp
                                        

                                        in a Command Prompt. I assume at least one "works", and produces a "usage" output message?

                                        Whichever produces the message, now try from a Qt program

                                        QProcess proc;
                                        proc.start(".....");    // here try whichever worked in Command Prompt
                                        qDebug() << proc.waitForFinished();
                                        qDebug() << proc.readAll();
                                        

                                        and report output.

                                        H 1 Reply Last reply 16 Nov 2023, 23:20
                                        1
                                        • J JonB
                                          16 Nov 2023, 09:04

                                          @hlowd
                                          This really should not be too difficult to diagnose, if you stick to what is suggested and report behaviour.

                                          First try both of

                                          scp
                                          \full\path\to\scp
                                          

                                          in a Command Prompt. I assume at least one "works", and produces a "usage" output message?

                                          Whichever produces the message, now try from a Qt program

                                          QProcess proc;
                                          proc.start(".....");    // here try whichever worked in Command Prompt
                                          qDebug() << proc.waitForFinished();
                                          qDebug() << proc.readAll();
                                          

                                          and report output.

                                          H Offline
                                          H Offline
                                          hlowd
                                          wrote on 16 Nov 2023, 23:20 last edited by
                                          #26

                                          @JonB

                                          it works(data is output)

                                          • output 1 : true
                                          • output 2 : "\r\nWindows IP ....."
                                          QProcess proc;
                                          proc.start("ipconfig /all");
                                          qDebug() << "output 1 : " << proc.waitForFinished();
                                          qDebug() << "output 2 : " << proc.readAll();
                                          

                                          do not Working

                                          • output 1 : false
                                          • output 2 : ""
                                          QProcess proc;
                                          proc.start("scp C:\\Users\\user\\a.ini user@192.168.1.250:/home/user/SW/");
                                          qDebug() << "output 1 : " << proc.waitForFinished();
                                          qDebug() << "output 2 : " << proc.readAll();
                                          

                                          this is also do not working

                                          • output 1 : false
                                          • output 2 : ""
                                          QProcess proc;
                                              proc.start("C:\\Windows\\System32\\OpenSSH\\scp.exe C:\\Users\\user\\a.ini user@192.168.1.250:/home/user/SW/");
                                              qDebug() << "output 1 : " << proc.waitForFinished();
                                              qDebug() << "output 2 : " << proc.readAll();
                                          
                                          J Pl45m4P J 3 Replies Last reply 17 Nov 2023, 06:27
                                          0

                                          16/29

                                          8 Nov 2023, 07:49

                                          • Login

                                          • Login or register to search.
                                          16 out of 29
                                          • First post
                                            16/29
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved