我需要生成一个作为控制台应用程序的子进程,并捕获其输出.
我为方法编写了以下代码:
string retMessage = String.Empty;
ProcessStartInfo startInfo = new ProcessStartInfo();
Process p = new Process();
startInfo.CreateNoWindow = true;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardInput = true;
startInfo.UseShellExecute = false;
startInfo.Arguments = command;
startInfo.FileName = exec;
p.StartInfo = startInfo;
p.Start();
p.OutputDataReceived += new DataReceivedEventHandler
(
delegate(object sender, DataReceivedEventArgs e)
{
using (StreamReader output = p.StandardOutput)
{
retMessage = output.ReadToEnd();
}
}
);
p.WaitForExit();
return retMessage;
Run Code Online (Sandbox Code Playgroud)
但是,这不会返回任何内容.我不相信该OutputDataReceived事件被回调,或者该WaitForExit()命令可能阻塞该线程,因此它永远不会回调.
有什么建议?
编辑:看起来我在回调中努力了.这样做:
return p.StandardOutput.ReadToEnd();
Run Code Online (Sandbox Code Playgroud)
似乎工作正常.
继续我在评论中回答问题"Gevent pool with nested web requests"的问题:
假设一个人有大量任务,使用gevent.spawn(...)同时生成所有任务是否有任何缺点,而不是使用gevent池和pool.spawn(...)来限制并发数量greenlets?
表达方式不同:即使不是要解决的问题不需要,使用gevent.Pool"限制并发"是否有任何优势?
知道什么会构成这个问题的"大数"吗?
我正处于一个问题,我无法决定采取哪种解决方案.
这个问题有点独特.让我们这样说,我从网络连续接收数据(每秒2到4次).现在,每个数据都属于不同的组合.现在,让我们调用这些组,group1,group2等.
每个组都有一个专用的作业队列,来自网络的数据被过滤并添加到其相应的组进行处理.
起初我为每个组创建了一个专用线程,它将从作业队列中获取数据,处理它然后进入阻塞状态(使用链接阻塞队列).
但我的大四学生建议我应该使用线程池,因为这样线程不会被阻塞,并且可供其他组处理.
但事实上,数据即时获取的速度足够快,并且线程处理它的时间足够长,因此线程可能不会进入阻塞模式.这也将保证数据按顺序处理(作业1在作业2之前完成),这在汇集时可能不会发生.
我的大四学生也倾向于这样一个事实,即汇集也会为我们节省大量的内存,因为线程已经被淘汰了(我以为他真的想要这个词;)).虽然我不同意这个,因为,我个人认为,汇集与否每个线程都有自己的堆栈内存.除非线程池中有某些我不知道的东西.
最后一件事,我一直认为汇集有助于工作在短时间内出现大量工作.这是有道理的,因为线程生成会导致性能下降,因为初始化线程所花费的时间比执行作业所花费的时间多得多.所以汇集在这里有很多帮助.
但在我的情况下,group1,group2,...,groupN始终保持活着状态.因此,如果有数据,他们仍然会在那里.因此,线程产生不是问题所在.
我的大四学生不相信,并希望我采用汇集解决方案,因为它的内存占用很大.
那么,走哪条路呢?
谢谢.
关于如何使用Spawning部署Django项目没有太多文档,但人们通过apache/mod_wsgi推荐它.
在另一个类似的问题中,其他SO用户建议我打开一个特定于Spawning的新问题,所以希望其他人也可以分享他们的经验.
我互动的32位Windows应用程序(目前德尔福[ENT] 2007至2009年移动)使用命令行交互产卵子流程,做计算密集型任务,这反过来写文本文件,图形用户界面父应用程序解析和分析 - 导致结果的交互式图形显示.
我可以访问多处理器(多用户)Linux集群(通过ssh),并希望将繁重的工作卸载到该集群.我的问题是如何从我的Windows应用程序中生成Linux中的进程.我可以设想使用安全FTP来放置和获取文件,但不知道如何在Linux中生成子进程.
进一步阅读的一些线索会很好 - 但代码/伪代码将是理想的.我可以想象,这可能更多是关于Windows-Linux交互而不是Delphi.
我试图检测安装程序何时从Python脚本中执行.具体来说,该应用程序是Oracle 10gR2数据库.目前我正在使用Popen的子进程模块.理想情况下,我只是使用wait()方法等待安装完成执行,但是,记录的命令实际上生成子进程来处理实际安装.以下是失败代码的示例代码:
import subprocess
OUI_DATABASE_10GR2_SUBPROCESS = ['sudo',
'-u',
'oracle',
os.path.join(DATABASE_10GR2_TMP_PATH,
'database',
'runInstaller'),
'-ignoreSysPrereqs',
'-silent',
'-noconfig',
'-responseFile '+ORACLE_DATABASE_10GR2_SILENT_RESPONSE]
oracle_subprocess = subprocess.Popen(OUI_DATABASE_10GR2_SUBPROCESS)
oracle_subprocess.wait()
Run Code Online (Sandbox Code Playgroud)
还有一个类似的问题在这里:杀害包括其子女从蟒蛇一子,但所选择的答案没有解决孩子的问题,而是指示用户直接调用应用程序等待.我正在寻找一个等待子进程的所有子进程的特定解决方案.如果有不确定数量的子流程怎么办?我将选择解决等待所有子进程完成的问题的答案.
更清楚失败:子进程在wait()命令之后继续执行,因为该命令只等待顶级进程(在这种情况下它是'sudo').下面是这个问题中已知子进程的简单图表:Python子进程模块 - > Sudo - > runInstaller - > java - >(未知)
在开发过程中,我在NodeJS项目中犯了错误.错误导致这样的错误消息.
events.js:85
throw er; // Unhandled 'error' event
^
Error: listen EADDRINUSE
at exports._errnoException (util.js:742:11)
at Server._listen2 (net.js:1148:14)
at listen (net.js:1170:10)
at net.js:1253:9
at dns.js:82:18
at process._tickCallback (node.js:343:11)
Run Code Online (Sandbox Code Playgroud)
没问题,我点击ctrl+C并重启过程,但我看到一些衍生的子进程仍处于活动状态.如何杀死根进程生成的所有进程?
示例代码:
module.exports.start = function(options) {
gulp.watch(['*.js'], onServerRestart);
onServerRestart();
var server;
function onServerRestart(e) {
if (server) server.kill();
server = require('child_process').spawn("node", ['--harmony', './server.js'], {stdio: "inherit", cwd: process.cwd() });
};
};
Run Code Online (Sandbox Code Playgroud) 我在 Unity 中制作了第一款游戏。它应该发布到 Android 和 iOS。一切工作正常,除了当我将屏幕比例更改为 9:18(三星 S8、Lg G6...)时小行星被切断之外,小行星被切断是因为生成点固定为 -2.4f 到 2.4f。我尝试了各种方法,但没有任何效果...我已经被告知要使用 screen.width,然后制作一些逻辑,但我不知道如何制作逻辑,以便它真正起作用。 在此输入图像描述
这是我在场景中生成小行星的代码:Instantiate(asteroid1prefab, new Vector3(Random.Range(-2.4f, 2.4f), 6, 0), Quaternion.identity);
任何形式的帮助将不胜感激,谢谢
我想在 Bash 中生成多个子进程,但我希望父脚本保持运行,这样发送到父脚本的信号也会影响生成的子进程。
这不会这样做:
parent.bash:
#!/usr/bin/bash
spawnedChildProcess1 &
spawnedChildProcess2 &
spawnedChildProcess3 &
Run Code Online (Sandbox Code Playgroud)
parent.bash立即结束,并且生成的进程继续独立运行。
我有一个现有的实用程序应用程序,我们称之为 util.exe。这是一个命令行工具,它从命令行获取输入,并在磁盘上创建一个文件,比如说一个图像文件
我想通过运行 util.exe 在另一个应用程序中使用它。但是它需要同步,以便在处理继续时知道文件存在。
例如(伪)
bool CreateImageFile(params)
{
//ret is util.exe program exit code
int ret = runprocess("util.exe",params);
return ret==0;
}
Run Code Online (Sandbox Code Playgroud)
是否有一个 Win32 API 调用将运行该进程并等待它结束?我查看了 CreateProcess 但它在尝试启动时立即返回,我查看了 ShellExecute 但这似乎有点难看,即使它是同步的。
我正在编写一个将执行 2 个任务的 shell 脚本。一项任务将启动一个必须持续运行的程序。在同一个脚本中,将启动将启动另一个程序的第二个任务。但是当第一个连续运行时,我如何在同一个脚本中启动另一个?
提前致谢。