request about scp command (QProcess) using qt
- 
@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. @hlowd said in request about scp command (QProcess) using qt: In the actual code, I entered two backslashes Please post real code you're using to avoid such confusion. 
 "Only the scp command did not work" - so does it work now or not?
 Did you add error handling as suggested?
- 
@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. 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_NAMESPACEclass MainWindow : public QMainWindow 
 {
 Q_OBJECTpublic: 
 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";
 }
- 
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_NAMESPACEclass MainWindow : public QMainWindow 
 {
 Q_OBJECTpublic: 
 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";
 }@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. 
- 
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_NAMESPACEclass MainWindow : public QMainWindow 
 {
 Q_OBJECTpublic: 
 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";
 }
- 
@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 
- 
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.@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.
- 
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.
- 
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)
- 
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)@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"
- 
@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"@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.
- 
@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"@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.
- 
@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.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. 
- 
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. 
- 
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. @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
- 
@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
- 
The scp.exe file exists in that path. C:\Windows\System32\OpenSSHI don't know why I couldn't find it using Explorer search. @hlowd said in request about scp command (QProcess) using qt: The scp.exe file exists in that path Does it work with this path? 
- 
@hlowd said in request about scp command (QProcess) using qt: The scp.exe file exists in that path Does it work with this path? 
- 
@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\scpin 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. 
 

