Articles of stdin

如何将string推送到stdin? 在启动时通过stdin提供input,然后交互地读取stdininput

调用它时,有没有办法将一个string“推”到程序的标准inputstream? 所以我们会有效果的 echo "something" | ./my_program 但不是在"something"之后读取EOF, my_program会从原始标准input(例如键盘)读取其进一步的input。 例如:假设我们想要启动一个bash shell,但是我们想要做的第一件事就是调用date 。 echo date | bash echo date | bash不会做这个工作,因为shell会在运行date之后终止。

非阻塞获取字符

平台:Linux 3.2.0 x86(Debian 7) 编译器:GCC 4.7.2(Debian 4.7.2-5) 我正在写一个函数,如果一个字符已经存在于标准input中,它将从标准input读取单个字符。 如果标准input为空,则该函数假设不执行任何操作并返回-1。 我googled非阻塞input,并被指向poll()或select() 。 首先,我尝试使用select(),但我无法得到它的工作,所以我尝试了poll(),并得出了相同的结论。 我不确定这些函数做了什么,但是从我所了解的poll()的文档来看,如果我这样称呼: struct pollfd pollfds; pollfds = STDIN_FILENO; pollfds.events = POLLIN; poll(pollfds, 1, 0); 如果(pollfds.revents&POLLIN)将为真,如果“高优先级数据以外的数据可以不被阻塞地读取”。 但是poll()总是在我的testing情况下超时。 我如何testingfunction可能是问题,但我想要的function正是我所testing的。 这里是目前的function和testing情况。 #include <poll.h> #include <stdio.h> #include <unistd.h> int ngetc(char *c) { struct pollfd pollfds; pollfds.fd = STDIN_FILENO; pollfds.events = POLLIN; poll(&pollfds, 1, 0); if(pollfds.revents & POLLIN) { […]

linux – 从一个terminal写入命令到另一个terminal

我需要从一个terminal写命令到另一个terminal。 我试过这些: echo -e "ls\n" > /proc/pid/fd/0 echo -e "ls\n" > /dev/pts/4 这只是打印ls作为输出,不执行。 我试过这些: chmod 777 /dev/tty4 ;echo "ls" > /dev/tty4 chmod 777 /dev/tty40 ;echo "ls" > /dev/tty40 哪些似乎没有做任何事情 有任何想法吗? [注意,我不想触摸第二个terminal来完成这个任务。 只有第一个]

如何从bash提供mysql查询

我试图做一个bash脚本,创build一个mysql用户和数据库,但我找不到一个方法来提供到MySQL mysql,我想这样的格式: mysql < echo "query" 但是这是行不通的,看下面的例子: mysql –host=localhost –user=user –password=password < echo "CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'jakdJxct8W'; CREATE DATABASE IF NOT EXISTS 'testuser_dev' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; GRANT ALL PRIVILEGES ON 'testuser_dev' . * TO 'testuser'@'localhost'; CREATE DATABASE IF NOT EXISTS 'testuser_qa' DEFAULT CHARACTER SET utf8 COLLATE utf8_bin; GRANT ALL PRIVILEGES […]

如何在按键后立即读取terminal的input缓冲区

我想阅读我的c程序中的箭头按键,并用其他stringreplace它们(立即在terminal本身)。 我正在试图在unixterminal中实现bash历史function。 我写了这个代码。 int main(int argc, char *argv[]) { char c; char str[1024]; int i = 0; while((c = fgetc(stdin)) != '\n'){ if(((int)c) == 27){ c=fgetc(stdin); c=fgetc(stdin); if (c == 'A') { printf("%c[A%c[2K",27, 27); printf("UP"); } } str[i++] = c; } printf("\n"); return 0; } 但是,这不起作用,因为terminal等待换行符或EOF发送input缓冲区到标准input。 所以,我必须按回车键来分析用户input。 在这个答案中 ,用户提到使用system ("/bin/stty raw"); 但是这会取代所有的默认terminal行为(例如退格,删除等)。 那么,有没有什么方法可以直接读取/操作terminalinput缓冲区,如果检测到箭头按键,就可以调整缓冲区本身? 环境 – […]

在batch file中读取标准inputstream

是否可以在batch file中使用pipe道标准inputstream? 我希望能够将一个命令的输出redirect到我的batch fileprocess.bat列表中,如下所示: C:\>someOtherProgram.exe | process.bat 我的第一次尝试看起来像: echo OFF setlocal :again set /p inputLine="" echo.%inputLine% if not (%inputLine%)==() goto again endlocal :End 当我testing它与type testFile.txt | process.bat type testFile.txt | process.bat重复打印第一行。 有另一种方法吗?

在Windows中同步读取stdin

我一直在这样做,在Linux下同步读取整个stdin数据: var buffer = fs.readFileSync('/dev/stdin'); 这显然不能在Windows上运行,因为没有/ dev / stdin文件。 我能做些什么来达到同样的效果?

aysncio无法读取Windows上的标准input

我正在尝试在Windows 7 64位和Python 3.4.3上asynchronous读取stdin 我尝试了这个启发的答案 : import asyncio import sys def reader(): print('Received:', sys.stdin.readline()) loop = asyncio.get_event_loop() task = loop.add_reader(sys.stdin.fileno(), reader) loop.run_forever() loop.close() 但是,它引发了一个OSError: [WInError 100381] An operation was attempted on something that is not a socket 。 像stdin这样的类似文件的对象可以被包装在一个类中来给它一个套接字的API吗? 我已经单独提出了这个问题 ,但是如果解决方法很简单,请在这里回答。 假设我不能包装一个类似文件的对象来使它成为一个套接字,我尝试使用stream的灵感来源于这个要点 : import asyncio import sys @asyncio.coroutine def stdio(loop): reader = asyncio.StreamReader(loop=loop) reader_protocol = […]

如何检查CLI程序是否正在等待来自stdin的input?

我怎样才能检查一个CLI程序,我刚刚开始使用CreateProcess(),是否正在等待来自stdin与Windows C API的input?

WIndows:subprocess制作新的控制台窗口,丢失stdin / out

我正在使用Windows Vista和Python 2.7.2,但答案不需要在Python中。 所以我可以使用命令行程序(例如dir)来启动并与subprocessstdin / stdout进行交互(使用python)。 – 然而 – 我现在想要调用的程序喜欢在Windows(不是诅咒)上为自己创build一个新的控制台窗口,即使从一个预先存在的cmd.exe窗口运行,也可以使用新的句柄。 (奇怪,因为它是VLC的“遥控”界面。)有什么办法可以: 获取进程控制台的stdin / out的句柄; 要么 让新的shell在旧版本中运行(如从bash中调用bash)? 否则,我可以破解subprocess的代码,将如何在Windows中设置新的控制台,并在/输出转移? 编辑:也就是说 >>> p = Popen(args=['vlc','-I','rc'],stdin=PIPE,stdout=PIPE) # [New console appears with text, asking for commands] >>> p.stdin.write("quit\r\n") Traceback: File "<stdin>", line 1, in <module> IOError: [Errno 22] Invalid argument >>> p.stdout.readline() '' >>> p.stdout.readline() '' # […] 但是新出现的控制台窗口也不接受键盘input。 通常情况下: […]