请告诉我这两个指令有什么区别,哪个更适合在代码中使用?
文件 MyClass.h
#include <iostream>
#include <string>
#ifndef MYCLASS_H
#define MYCLASS_H
//class description
#endif
或者
#pragma once
#include <iostream>
#include <string>
//class description
请告诉我这两个指令有什么区别,哪个更适合在代码中使用?
文件 MyClass.h
#include <iostream>
#include <string>
#ifndef MYCLASS_H
#define MYCLASS_H
//class description
#endif
或者
#pragma once
#include <iostream>
#include <string>
//class description
我在这个过程中实现了异步读/写操作的功能。但是,不会执行提供给进程的命令。
创建一个进程并重定向必要的线程:
StringBuilder outputText = new StringBuilder();
StringBuilder outputError = new StringBuilder();
Process process = new Process();
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
RedirectStandardInput = true,
RedirectStandardError = true,
RedirectStandardOutput = true,
CreateNoWindow = true,
UseShellExecute = false,
ErrorDialog = false,
Arguments = "/cpython.exe"
};
process.StartInfo = startInfo;
AutoResetEvent outputWaitHandle = new AutoResetEvent(false);
AutoResetEvent errorWaitHandle = new AutoResetEvent(false);
process.OutputDataReceived += (sender, e) =>
{
if (e.Data == null) { outputWaitHandle.Set();}
else{ outputText.AppendLine(e.Data); }
}
process.ErrorDataReceived += (sender, e) =>
{
if (e.Data == null) { errorWaitHandle.Set();}
else{ outputError.AppendLine(e.Data); }
}
process.Start();
process.BeginOutputReadLine();
process.BeginErrorReadLine();
if (timeout > 0)
{
if (process.WaitForExit(timeout) &&
outputWaitHandle(timeout) &&
errorWaitHandle.WaitOne(timeout))
{
// Do some work...
}
}
异步写入流:
if (process.StandardInput.BaseStream.CanWrite)
{
byte[] bytesToWrite = Encoding.ASCII.GetBytes("print 'Hello'");
IAsyncResult handle = process.StandardInput.BaseStream.BeginWrite(bytesToWrite, 0, bytesToWrite.Length, EndWriteCallBack, process.StandardInput.BaseStream);
if (handle.IsCompleted)
{
// Do smth ....
}
else
{
handle.AsyncWaitHandle.WaitOne();
}
}
//Callback func
void EndWriteCallBack(IAsyncResult handle)
{
process.StandardInput.BaseStream.EndWrite(handle);
}
在输出中,我希望我的异步输出将打印的字符串返回给我:
outputText = "print 'Hello'"
就像控制台一样。但是,输出始终为空。告诉我可能是什么问题?
PS:如果你删除输入流的重定向,一切正常。但我希望能够将多个命令发送到同一个控制台,因为这可以通过直接使用它来完成。
有一个带有输入参数的脚本需要在单独的进程中异步运行(要运行的函数如下所示)。然而,目前有代码,它与主执行线程同步运行并阻止其执行直到完成:
import shlex
import subprocess
import sys
def CreateSubProcess(script, params):
command_line = '\"{0}\" \"{1}\" \"{2}\"'.format(sys.executable, script, params)
args = shlex.split(command_line)
script_process = subprocess.Popen(args, stdout=subprocess.PIPE)
out, err = script_process.communicate()
exit_code = scriptprocess.returncode
如何使脚本在单独的进程中异步工作,并能够检查进程的可行性?