QProcess를 사용하여 콘솔 응용 프로그램과 통신합니다. 일부 단어를 쓰고 출력을 읽습니다. 하지만 QProcess를 통해 줄을 써야합니다. 그것은 * 변수는 argv []는 char 매개 변수를 전달하기 때문에,Qt | QProcess | 콘솔 응용 프로그램에 줄 쓰기
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
int main(int argc, char* argv[])
{
string action;
do
{
cout << "(test)";
cin >> action;
cout << action;
if(action.length() > 10)
{
cout << "\t very long string";
}
cout << endl;
}
while(action != "exit");
return 0;
}
그래서, 내가 QProcess를 통해 매개 변수를 전달할 수 : 임원 또는 QProcess 시작 :: 예를 들어, 나는 다음 콘솔 응용 프로그램을 가지고있다. 나는 QProcess를 시작한 후에 그것을 전달해야한다. QProcess :: write를 사용해 보았지만 문제가 있습니다. 사용하는 경우
process.write("oneWord\n");
나는 성공할 것입니다. 그러나 내가 사용하는 경우
process.write("several words\n");
내 프로그램은 개별적으로 모든 단어를 쓸 것입니다 및 콘솔 응용 프로그램이 하나의 문자열로 인식하지 않는
process.write("several\n");
process.write("words\n");
것 같습니다. 나는 다른 방법을 사용하여 시도했다 : 대괄호 라인을 작성,
process.write("\"several words"\\n");
및
process.write("\"several words\n""\);
사용하는 보호 방법 QIODEvice::setOpenMode
및 설정 QIODevice::Text
플래그를 QDataStream
를 사용, 사용 특수 기호를 \r
처럼 \n
, \t
및 다른 조합. 또한, 나는 QProcess가 QIODevice을 상속하고 파일 (입력 & 출력)처럼 처리 할 수있는 기회가 있다는 것을, QProcess::write
process.write("several");
process.write("words\n");
내가 아는 여러 사용했습니다. 그러나 단어가 파일로 개별적으로 기록되는지는 중요하지 않습니다. 제 경우에는 중요합니다.
아무도 도와 줄 수 있습니까?
문제는'QProcess :: write'가 텍스트를 응용 프로그램에 보내는 방법과 관련이 없습니다. 문제는 응용 프로그램이 그것을 읽는 방법에 있습니다. 'cin >> action'은 첫 번째 공백 문자까지 일련의 문자를 읽으므로''여러 단어 ''를 하나의'action'으로 읽을 수 없습니다. '[std :: getline'] (http://en.cppreference.com/w/cpp/string/basic_string/getline) –
표준 IO 스트림은 스트림입니다. "메시지"를 쓸 수없고 보이지 않는 메시지 테두리 표시가있을 것으로 예상됩니다. 그것은 모두 하나의 문자입니다. 그런 식으로 * cin *을 사용하는 코드에서 공백은 구분 기호로 해석되므로 한 번에 한 단어 씩 가져와 모든 공백을 제거합니다. – hyde