标签: external-process

C#:重定向控制台应用程序输出:如何刷新输出?

我正在产生外部控制台应用程序并使用异步输出重定向.
如此SO帖子所示

我的问题是,在得到OutputDataReceived事件通知之前,生成的进程似乎需要产生一定量的输出.

我想尽快收到OutputDataReceived事件.

我有一个简单的重定向应用程序,这里有一些观察:
1.当我调用一个简单的'while(true)print("X");' 控制台应用程序(C#)我立即收到输出事件.2.当我调用3d派对应用程序时,我试图从命令行行,我看到逐行输出.
3.当我从裸骨包装器中调用该3d派对应用程序时(参见1) - 输出以块(约一页大小)的形式出现.

该应用内部会发生什么?

仅供参考:有问题的应用程序是"USBee DX数据Exctarctor(异步总线)v1.0".

c# console external-process output-redirect

5
推荐指数
1
解决办法
1万
查看次数

C - 从ncurses ui转到外部程序并返回

我正在制作一个在ncurses中显示一些信息的程序,然后打开vim(使用system)以允许用户编辑文件.但是,在退出vim之后,ncurses屏幕将不会重绘. refresh并且wrefresh什么都不做,导致我的菜单完全被废弃.

所以,我被送回命令行.当我移动它们时,菜单项会重新绘制.四处移动会产生如下情况:

悲剧

正如你所看到的,我不再在我漂亮的ncurses环境中了.

我可以完全拆掉ncurses并重新设置,但是后来某些东​​西(比如菜单位置)没有保留.

我该怎么做呢?有没有更好的方法来调用一些外部程序并优雅地返回这里?

c external-process ncurses

5
推荐指数
1
解决办法
602
查看次数

在外部进程关闭之前,ProcessBuilder的InputStream没有输入

在为控制台应用程序构建包装器时,我遇到了这个奇怪的问题,其中连接到外部进程的输出(stdout)的输入流完全空白,直到外部进程退出.

我的代码如下:

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;

public class Example{

    public static void main(String args[]) throws IOException{
        File executable = ...

        ProcessBuilder pb = new ProcessBuilder(executable.getCanonicalPath());

        pb.redirectErrorStream(true);

        Process p = pb.start();

        BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream(), Charset.forName("UTF-8")));

        String line;

        while((line = br.readLine()) != null){
            System.out.println(line);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试了几种从输入流中读取的变体,并且都导致了相同的行为.

我试过了:

CharBuffer charBuf = CharBuffer.allocate(1000);

InputStreamReader isr = new InputStreamReader(p.getInputStream(), Charset.forName("UTF-8"));

while(isr.read(charBuf) != -1){
    System.out.print(charBuf.flip().toString());
}
Run Code Online (Sandbox Code Playgroud)

byte[] buf = new byte[1000];
int r;

while((r = p.getInputStream().read(buf)) …
Run Code Online (Sandbox Code Playgroud)

java external-process inputstream processbuilder

5
推荐指数
1
解决办法
1141
查看次数

使用系统中的多个命令从R调用外部程序

我是编程新手,主要是我能在R中做一些脚本,但对于我的工作,我需要调用一个外部程序.要使这个程序在ubuntu的终端上工作,我必须首先使用setenv,然后执行程序.谷歌搜索我发现system()和Sys.setenv()函数,但不幸的是我可以使它功能.

这是在ubuntu终端中工作的代码:

$ export PATH=/home/meme/bin:$PATH
$ mast "/home/meme/meme.txt" "/home/meme/seqs.txt" -o "/home/meme/output" -comp
Run Code Online (Sandbox Code Playgroud)

前两个参数是输入文件,-o参数是输出目录,-comp是程序运行的另一个参数.

虽然它已经在终端中运行,我需要在R中执行它的原因是因为我需要使用1000个不同的文件运行程序1000次,所以我想创建一个for循环,其中输入名称在每个循环中更改然后分析R中的每个输出

我已经尝试过使用:

Sys.setenv(PATH="/home/meme/bin"); system(mast "/home/meme/meme.txt" "/home/meme/seqs.txt" -o "/home/meme/output" -comp )
Run Code Online (Sandbox Code Playgroud)

system(Sys.setenv(PATH="/home/meme/bin") && mast "/home/meme/meme.txt" "/home/meme/seqs.txt" -o "/home/meme/output" -comp )
Run Code Online (Sandbox Code Playgroud)

但总是收到:

Error: unexpected constant string in "system(mast "/home/meme/meme.txt""
Run Code Online (Sandbox Code Playgroud)

要么

Error: unexpected symbol in "system(Sys.setenv(PATH="/home/meme/bin") && mast "/home/meme/meme.txt""
Run Code Online (Sandbox Code Playgroud)

在这一点上,我已经没有想法使这项工作.如果这已经得到了回答,那么我的谷歌搜索功能一直很差,我会很感激其回复的任何链接.

非常感谢您的宝贵时间.

卡洛斯

额外细节:

我使用的是Ubuntu 12.04 64位版本,RStudio版本0.97.551,R版本3.0.2(2013-09-25) - "Frisbee Sailing"平台:x86_64-pc-linux-gnu(64位).我使用的程序(MAST)在字母列表中找到序列模式,并且是http://meme.nbcr.net/meme/doc/meme-install.html中运行的MEME SUIT版本4.9.1的一部分并运行通过命令行.mast的命令行用法是:

mast    <motif file> <sequence file> [options]
Run Code Online (Sandbox Code Playgroud)

shell command-line external-process r

5
推荐指数
1
解决办法
1万
查看次数

system()和CreateProcess()/ CreateProcessW()

我想在C程序中执行TEST.exe.我用的时候

system( "TEST.exe <input-file> output-file" );
Run Code Online (Sandbox Code Playgroud)

我可以得到我的预期.

但是当我使用以下代码时,CreateProcessW()无法正常工作(请参阅如何运行外部程序?):

if (CreateProcessW(const_cast<LPCWSTR>(FullPathToExe.c_str()), 
    pwszParam, 0, 0, false, 
    CREATE_DEFAULT_ERROR_MODE, 0, 0, 
    &siStartupInfo, &piProcessInfo) != false) 
{ 
    /* Watch the process. */ 
    dwExitCode = WaitForSingleObject(piProcessInfo.hProcess,  (SecondsToWait * 1000)); 
    iReturnVal = GetLastError(); 
} 
else 
{ 
    /* CreateProcess failed */ 
    iReturnVal = GetLastError(); 
} 
Run Code Online (Sandbox Code Playgroud)

哪里

FullPathToExe="TEST.exe", pwszParam="TEST.exe <input-file> output-file".
Run Code Online (Sandbox Code Playgroud)

WaitForSingleObject()返回258,GetLastError()返回1813("在图像文件中找不到指定的资源类型.").

此外,上面的CreateProcessW()代码运行我自己的HelloProcess.exe(打印问候,睡眠时间由以下数字确定,然后退出.)

FullPathToExe="HelloProcess.exe", pwszParam="HelloProcess.exe 10".
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢你的任何提示!

windows external-process system createprocess

4
推荐指数
1
解决办法
7437
查看次数

在Perl中命令执行失败时如何读取stderr?

我正在执行一个diff命令perl.

my @lines = `/usr/local/bin/diff -udr \"$expected_file\" \"$gen_file\"`;

if ($? != 0)
{
    print ERRFILE "Diff between $expected_file and $gen_file failed\n";
    return $diff_err;
}
Run Code Online (Sandbox Code Playgroud)

diff由于某种原因,这里可能失败了.例如:stderr显示/ usr/local/bin/diff:test.txt:没有这样的文件或目录.我想在程序中阅读此消息.如何找到diff命令的stderr消息(或者grep我执行的任何命令)?

提前感谢您的帮助.

谢谢,Mathew Liju

perl external-process

3
推荐指数
1
解决办法
2606
查看次数

没有Process.start的开放网站

如何打开浏览器中的一个网站的网址没有Process.start(...):

System.Diagnostics.Process.Start(@"http://www.google.com");
Run Code Online (Sandbox Code Playgroud)

我无法Process.Start()在Windows服务中使用,我不知道为什么.

c# external-process process

3
推荐指数
2
解决办法
3558
查看次数

使用Process.Start()通过外部程序启动代码时进行调试

假设我有一个C#WinForms应用程序,它只是通过使用外部程序启动Process.Start(MyModule.exe).

我试图通过使用我的项目属性调试我的代码- > 调试 - > 启动操作 - > 启动外部程序(当然设置正确的工作目录).

我的另一个尝试是Debug - > Attach to process

更新:我的模块和外部程序都使用一个资源.所以外部程序释放它,然后调用Process.Start(),等待我的进程退出ans然后再次捕获资源.所以当你的程序已经运行时我无法附加.

它们都失败了 - Program.cs中的断点从未被击中.

那么,在这种情况下如何调试我的代码呢?

c# debugging external-process process.start

3
推荐指数
1
解决办法
2660
查看次数

多处理 - 执行外部命令并等待继续

我正在使用Linux.我有一个名为"combine"的外部可执行文件和一个20次迭代的循环.每次迭代时,需要使用依赖于第i次迭代的参数调用"combine".例:

arguments = " "

for i in range(1,20):
    arguments += str(i) + "_image.jpg "
    # begin of pseudo-code 
    execute: "./combine" + arguments  # in parallel using all cores

# pseudo-code continues
wait_for_all_previous_process_to_terminate
execute: "./merge_resized_images"  # use all cores - possible for one single command?
Run Code Online (Sandbox Code Playgroud)

如何使用Python中的多处理模块实现此目的?

python external-process multiprocessing

3
推荐指数
1
解决办法
1万
查看次数

从python启动和停止外部进程

有没有办法从python启动和停止进程?我说的是在正常运行时用 ctrl+z 停止的继续进程。我想启动这个过程,等待一段时间然后终止它。我正在使用Linux。

这个问题不像我的,因为在那里,用户只需要运行这个过程。我需要运行它并停止它。

python linux subprocess external-process

3
推荐指数
1
解决办法
3969
查看次数