我有一个二进制数据文件,我需要在某个位置替换几个字节.我想出以下内容将bash指向偏移并告诉我它找到了我想要的地方:
dd bs=1 if=file iseek=24 conv=block cbs=2 | hexdump
Run Code Online (Sandbox Code Playgroud)
现在,使用"file"作为输出:
echo anInteger | dd bs=1 of=hextest.txt oseek=24 conv=block cbs=2
Run Code Online (Sandbox Code Playgroud)
这似乎工作得很好,我可以查看十六进制编辑器中所做的更改.问题是,"anInteger"将被写为该整数的ASCII表示(这是有意义的)但我需要编写二进制表示.
我想为此使用bash,脚本应该在尽可能多的系统上运行(我不知道目标系统是否会安装python或其他任何东西).
如何告诉命令将输入转换为二进制(可能是十六进制)?
我有以下内容:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button3_Click(object sender, EventArgs e)
{
try
{
var strExpression = @"
import sys
sys.stdout=my.write
print 'ABC'
";
var engine = Python.CreateEngine();
var scope = engine.CreateScope();
var sourceCode = engine.CreateScriptSourceFromString(strExpression);
scope.SetVariable("my", this);
var actual = sourceCode.Execute<string>(scope);
textBox1.Text += actual;
}
catch (System.Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
public void write(string s)
{
textBox1.Text += s;
}
}
Run Code Online (Sandbox Code Playgroud)
但我得到一个Exception说没有write.
我做错了什么?
我正在调用一个在我的控制台/标准输出中打印一些字符串的函数.我需要捕获这个字符串.我不能修改正在进行打印的函数,也不能通过继承来改变运行时行为.我无法找到任何允许我这样做的预定义方法.
JVM是否存储打印内容的缓冲区?
有谁知道有助于我的Java方法?
我正在Android/Linux下编写一个运行系统命令的C程序.该命令将一些文本输出到stdout,我正在尝试将输出捕获到字符串或字符数组中.
例如:
system("ls");
Run Code Online (Sandbox Code Playgroud)
会将当前目录的内容列为stdout,我希望能够以C编程方式将该数据捕获到C中.
我该怎么做呢?
谢谢.
我正在使用Win32生成一个进程CreateProcess,设置hStdOutput和创建的管道句柄的hStdError属性.我有两个线程读取管道,等待数据可用(或完成的过程,此时它检查在终止线程之前没有剩余数据).
随着数据变得可用,我将输出写入有效的大文本框.STARTUPINFOCreatePipe
正在发生的事情是输出被缓冲,因此缓慢运行的进程只会在文本框中抛出大量数据,但不会"发生".
我不确定它是否正在进行缓冲管道,或者与重定向有关.
有没有办法将管道设置为无缓冲,或者以尽快发送stdout的方式启动进程?
我正在使用一个测试应用程序进行测试
Here is line one
(waits one second)
Here is line two
(waits one second)
... etc
Run Code Online (Sandbox Code Playgroud) 目前我正从我的C#程序启动批处理文件:
System.Diagnostics.Process.Start(@"DoSomeStuff.bat");
Run Code Online (Sandbox Code Playgroud)
我希望能够做的是将该子进程的输出(stdout和stderr)重定向到Visual Studio中的Output窗口(特别是Visual C#Express 2008).
有没有办法做到这一点?
(另外:这样就不会全部缓冲,然后在子进程完成时吐出到Output窗口.)
(顺便说一句:目前我可以通过使我的程序成为"Windows应用程序"而不是"控制台应用程序"来使父进程的stdout(但不是stderr)出现在"输出"窗口中.如果程序运行,这会中断在Visual Studio之外,但在我的特定情况下这是好的.)
我有一个应用程序,我们称之为myapp.exe,这是双模式控制台/ GUI,内置为/ SUBSYSTEM:WINDOWS(有一个小的3KB垫片myapp.com使cmd.exe等待显示新提示.)
如果我从命令提示符启动:
myapp - > cmd.exe运行运行myapp.exe的myapp.com.stdout最初是一个独立的控制台,通过使用AttachConsole,freopen("CONOUT$", "w", stdout)我的输出显示在命令框中.好myapp.exe - > cmd.exe显示提示太早(已知问题),否则与之前相同.不是正常的使用场景.myapp > log- > stdout是一个文件,正常使用std::cout最终在文件中.好如果我从Windows资源管理器启动:
myapp.com - >创建控制台,stdout是控制台,输出进入控制台.使用/ SUBSYSTEM:CONSOLE用于整个程序的结果相同,只是我myapp.com在控制台中唯一的进程时添加了一个暂停.不是正常的使用场景.myapp.exe- > stdout是一个NULL句柄,我检测到这个并挂钩std::cout到GUI.好如果我从Matlab shell启动:
system('myapp')或者system('myapp.com')或system('myapp.exe')- >对于所有三种变型中,标准输出通过管道输送到MatLab的.好如果我从cygwin bash shell启动:
./myapp.com - >就像从cmd.exe启动一样,输出显示在命令框中.好./myapp- >(bash发现./myapp.exe). 这是破案.stdout是一个非NULL句柄,但输出无处可去.这是从bash运行程序的正常情况,需要修复!./myapp > log - >就像从带有文件重定向的cmd.exe启动一样.好./myapp | cat - >与文件重定向类似,但输出最终在控制台窗口中.好有没有人知道cygwin在启动/ SUBSYSTEM:WINDOWS进程时设置为stdout以及如何绑定std::cout它?或者至少告诉我如何找出我从哪个手柄回来GetStdHandle(STD_OUTPUT_HANDLE)?
我的程序是用Visual C++ 2010编写的 …
我正在通过MacOS中的NSTask运行PHP CLI,但这个问题更多的是关于CLI本身.
我正在听stderr管道,但无论我尝试运行什么文件,都没有输出:
stdout设置为?. stdout. 是否有转换到解释器来处理错误stderr?我是否可以选择检测解析以外的错误stdout?
是否有结果什么特别的理由java -version去stderr?
例如,此命令从Windows的提示行执行:
java -version > java_version.txt
Run Code Online (Sandbox Code Playgroud)
将文件java_version.txt留空.
编辑:执行后java.exe没有任何参数打印出的帮助也是如此.
编辑:出于纯粹的好奇心,我检查了它是否总是那样,事实证明它确实存在.java -version转到stderrJDK 1.1.8和JDK 1.2.2,但是java.exe没有任何参数的输出没有.
考虑到Python的动态性,如果不可能的话,我会感到震惊:
我想改变执行情况sys.stdout.write.
我从这个答案得到了我的另一个问题的想法:https://stackoverflow.com/a/24492990/901641
我试着写这个:
original_stdoutWrite = sys.stdout.write
def new_stdoutWrite(*a, **kw):
original_stdoutWrite("The new one was called! ")
original_stdoutWrite(*a, **kw)
sys.stdout.write = new_stdoutWrite
Run Code Online (Sandbox Code Playgroud)
但它告诉我AttributeError: 'file' object attribute 'write' is read-only.
这是一个很好的尝试,让我不要做一些潜在的(可能)愚蠢的事情,但我真的很想继续这样做.我怀疑解释器有一些我可以修改的查找表,但我在Google上找不到类似的东西.__setattr__也没用 - 它返回了关于属性为只读的完全相同的错误.
我特意寻找Python 2.7解决方案,如果这很重要,虽然没有理由拒绝投入适用于其他版本的答案,因为我怀疑未来的其他人会在这里看到与其他版本类似的问题.