Articles of pipe理员

在Windows 7下的python中使用文本文件作为标准input

我是一个win7用户。 我意外地读了* nix系统中的redirect(比如command1 < infile > outfile ),然后我发现在Windows(链接)中可以做类似的事情 。 而且python也可以用pipe(?)或者stdin / stdout(?)来做这样的事情。 我不明白这是怎么发生在Windows中,所以我有一个问题。 我使用某种专有的Windows程序(.exe)。 该程序能够将数据附加到文件。 为了简单,让我们假设它是类似的东西 while True: f = open('textfile.txt','a') f.write(repr(ctime()) + '\n') f.close() sleep(100) 问题:我可以使用这个文件(textfile.txt)作为标准input吗? 我的意思是脚本(运行时)应该总是(不是一次)处理所有的新数据,即 在“永无止境的循环”中: 程序(.exe)写入内容。 Python脚本捕获数据和进程。 你能写出如何在Python中做到这一点,或者在win cmd / .bat或其他方式。 这是非常酷的事情。 我想学习如何做到这一点! :d

如何在命令行中禁用Hyper-V?

我试图打开VMware,它说,VMware播放器和Hyper-V不兼容。 我发现它在这里 ,但它不能使用它提供的命令。 我试图看到帮助,发现那里有/hypervisorsettings选项。 但仍然不能用,它说The parameter is incorrect 。 有人能帮忙吗?

C / C ++程序中如何存在静态地址?

我已经看了一下Cheat Engine ,它可以让你检查和操作Windows上正在运行的进程的内存:你根据它们的值扫描variables,然后你可以修改它们,例如在游戏中作弊。 为了编写一个机器人或类似的东西,你需要find一个你想改变的variables的静态地址,也就是说,如果这个进程重新启动,那么这个variables保持不变。 方法大致是这样的: 查找您感兴趣的variables的地址,按值查找 查找使用该地址的代码,例如查找它所属的结构的地址(因为结构偏移是固定的) find指向该指针的另一个指针,直到find一个带有静态地址的指针(在Cheat Engine中显示为绿色) 从我看过的教程看来,它工作得很好,但是我很难理解它为什么起作用。 不是所有的variables,包括全局静态variables,在运行时都会得到一个非常随机的地址吗? 奖金问题: Cheat Engine如何判断一个地址是否是静态的(即重启时会保持不变)? 一个教程提到,许多旧的和一些现代的游戏(如使命召唤4) 只使用静态地址。 这怎么可能?

用于C ++的数据库访问库

背景: 我有一个使用本地C ++编写的应用程序,它使用wxWidgets工具包的wxODBC数据库访问库,它将从所有未来版本的wxWidgets中删除 。 我需要用支持下面概述的假设和约束的另一种数据库访问方法replace它。 我不需要replace使用本机DBMS API或ODBC,但它必须符合下面列出的限制。 假设/约束 图书馆必须: 支持本机(即非托pipe)C ++ 32位Windows 2000 / XP / 2003 Visual Studio 2005 Microsoft SQL Server 2000和2005 Oracle 9和10 运行时性能大于或等于wxODBC 支持多个DBMS的单个程序员API(例如,不想为使用不同的DBMS编写不同的代码) 很好,但可选: 64位Windows操作系统 32位和/或64位Linux操作系统 Microsoft SQL Server 2008 Oracle 11 MySQL的 任何额外的DBMS Visual Studio 2008 开源 运行时性能接近或等于本地DBMS API 题: 有什么好的库可用 – 免费的,开源的或付费的 – 从单一的API(包括Oracle和Microsoft SQL Server)支持多个DBMS,并且可以使用本地C ++? 请描述过去的任何经验 […]

在32位和64位Windows版本上的进程大小和行为差异

我正在调查我的应用程序的一个奇怪的问题,其中2个版本的Windows的行为是不同的: Windows XP(32位) Windows Server 2008(64位) 我的发现如下。 Windows XP(32位) 在运行我的testing场景时,XMLparsing器在parsing一个非常大的configuration文件的过程中某个时候失败(请参阅此问题以获取更多信息)。 在失败时,进程大小约为2.3GB。 请注意,registry项已设置为允许进程超过默认的最大进程大小(在32位操作系统上)为2GB。 失败的系统是调用IXMLDOMDocument::load()失败,如上面链接的问题中所述。 Windows Server 2008(64位) 我在Windows Server 2008中运行完全相同的testing场景 – 唯一的variables是操作系统。 当我看着我的任务pipe理器下的进程,它旁边有一个* 32 ,我假设它意味着它在32位兼容模式下运行。 我注意到的是,在Windows XP上XMLparsing失败的地方,Windows Server 2008上的进程大小只有大约1GB(IOW,大约是Windows XP的一半进程大小)。 在Windows Server 2008上,XMLparsing不会失败,它一切正常。 我的问题是: 为什么32位应用程序(以32位模式运行)在64位操作系统上占用一半内存量? 是真的使用了一半的内存,它是不同的通常的虚拟内存,还是其他的东西? 确认我的应用程序(似乎)使用Windows Server 2008上的一半内存量,没有人有任何想法,为什么XMLparsing将在Windows XP上失败? 每次运行testing用例时,通过IXMLDOMParseError访问的错误(请参阅此答案 )是不同的。 因为这似乎是非确定性的,它暗示我正在遇到内存使用问题,而不是处理格式不正确的XML。

如何根据操作系统家族有不同的依赖关系

我正在编写一个跨平台的库,它具有特定于平台的依赖关系,一个用于unix平台,另一个用于windows。 这些箱子只能在特定的平台上编译,所以我不能把它们全部添加到通常的依赖项下。 在实际的防锈代码中,我使用cfg属性,如#[cfg(unix)]来编译某些平台的某些代码,我想在Cargo.toml或构build脚本中为依赖项做类似的事情。 目前,我正在使用这样的目标三元组: [target.i686-unknown-linux-gnu.dependencies.crate1] git = repo1 [target.x86-unknown-linux-gnu.dependencies.crate1] git = repo1 [target.x86_64-unknown-linux-gnu.dependencies.crate1] git = repo1 [target.i686-pc-windows-gnu.dependencies] crate2 = "*" [target.x86-pc-windows-gnu.dependencies] crate2 = "*" [target.x86_64-pc-windows-gnu.dependencies] crate2 = "*" 但是,这个清单还不够详尽。 我不关心架构或ABI,只有OS系列,因此,名单会变得很长,我是为每一个unix-like目标三倍匹配。 有没有什么方法可以使用特定的依赖关系,仅由操作系统的操作系统平台运行? 就像是: [target.family.unix.dependencies] abc-sys = "*" def = "*" [target.family.windows.dependencies] abc-win = "*"

使c ++程序以交互方式将input输出传递给windows命令提示符

我想做一个简单的程序,并行地启动一个cmd.exe,并将用户的input作为一个命令,然后传递给cmd.exe,执行后我的程序应该从cmd.exe的输出,并显示它用户。 基本上是一个命令提示符的界面。 我不想使用像system()这样的方法,因为他们每次都启动一个cmd的新实例,而我不能像cd一样运行命令。 我试着用下面的代码来生成一个cmd并显示初始行(copyright ….),但是传递命令只是简单地返回相同的行。 #include <iostream> #include <windows.h> #include <process.h> using namespace std; DWORD WINAPI exec(LPVOID inputP){ char* input=(char*) inputP; HANDLE stdinRd, stdinWr, stdoutRd, stdoutWr; SECURITY_ATTRIBUTES sa = {sizeof(SECURITY_ATTRIBUTES), NULL, true}; STARTUPINFO si; PROCESS_INFORMATION pi; DWORD stuff; char buff[1000]; //Create the main transfer pipe if(!CreatePipe(&stdinRd, &stdinWr, &sa, 0) || !CreatePipe(&stdoutRd,&stdoutWr, &sa, 0)) { cout<<"Pipe […]

在Unix(或Windows)中,如何使用(最好是未命名的)pipe道将一个进程的stdout发送到多个进程?

我想将进程proc1的stdoutredirect到两个进程proc2和proc3: proc2 -> stdout / proc1 \ proc3 -> stdout 我试过了 proc1 | (proc2 & proc3) 但它似乎并没有工作,即 echo 123 | (tr 1 a & tr 1 b) 写 b23 stdout而不是 a23 b23

与Windows命名pipe道(.Net)的asynchronous双向通信

我有一个Windows服务和一个graphics用户界面需要相互沟通。 可以随时发送消息。 我正在看使用NamedPipes,但似乎你不能同时读取和写入stream(或者至less我找不到任何涵盖这种情况的例子)。 是否有可能通过单个NamedPipe进行这种双向通信? 或者我需要打开两个pipe道(一个来自GUI->服务,另一个来自服务 – > GUI)?

使用SetProcessWorkingSetSize的优点和缺点

我的应用程序中有内存pipe理问题。 应用程序内存在运行时迅速增长。 我在断开模式下使用数据集。 为了解决这个问题,我经常刷新DS,并使用SetProcessWorkingSetSize来pipe理内存使用情况。 在我的开发电脑上工作正常。 使用SetProcessWorkingSetSize的优点和缺点是什么?