标签: popen

Popen 给出“找不到文件”错误(Windows/Python)

我试图通过subprocess.Popen运行控制台命令,每当我运行它时,即使运行 echo 命令,我也会收到 Windows“文件未找到”错误。我还在使用 thread 模块创建的线程中使用 Popen。这是问题所在吗?

python windows popen

2
推荐指数
1
解决办法
5120
查看次数

如何捕获popen4找不到的命令

我正在使用popen4来捕获stdout,stderr和命令行的退出状态.只要我能抓住上述三件事,我就不会受到popen4的束缚.目前我还没有找到捕获命令未找到错误的好方法.我想which cmd在一个预先任务中做一个,但希望内置一些东西.

在下面你可以运行一个好的任务,糟糕的任务和一个虚假的任务来查看差异.我正在以新鲜rails new apppopen4宝石做这件事

#!/usr/bin/env rake
# Add your own tasks in files placed in lib/tasks ending in .rake,
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.

require File.expand_path('../config/application', __FILE__)

require 'open4'

# returns exit status 0, all is good
task :convert_good do
  puts "convert good"
  `wget https://www.google.com/images/srpr/logo3w.png`
  status = Open4.popen4("convert logo3w.png output.jpg") do |pid, stdin,stdout,stderr|
    stdin.close
    puts "stdout:"
    stdout.each_line { |line| puts line }
    puts "stderr: #{stderr.inspect}"
    stderr.each_line …
Run Code Online (Sandbox Code Playgroud)

ruby rake ruby-on-rails popen

2
推荐指数
1
解决办法
1526
查看次数

.communicate() 和 .communicate()[0] 有什么区别?

我正在使用蟒蛇。我正在尝试运行一个进程并使用 subprocess.popen 获取输出。在阅读之后,我看到人们使用了communication()[0] 但这不在文档中,它在一个示例中使用。我想知道是否有人可以告诉我为什么要附加 [0] 到communication()?

python subprocess popen communicate

2
推荐指数
1
解决办法
1206
查看次数

尝试通过 Popen() 使用 Python 发送 EOF 信号 (Ctrl+D) 信号

我试图让Python来发送EOF信号(Ctrl+ DVIA) Popen()。不幸的是,我Popen()在 *nix-like 系统上找不到任何类型的信号参考。这里有人知道如何发送这样的EOF信号吗?另外,是否有任何关于要发送的可接受信号的参考?

posix popen eof python-2.7

2
推荐指数
1
解决办法
3050
查看次数

将参数传递给Python subprocess.Popen

我正在将此 bash 脚本转换为 Python。我现在有一个可以运行的 Python 版本。然而,为了让它工作,我必须修改传递给 subprocess.Popen() 的命令,将其变成一个长字符串。 我不想使用一长串命令。我希望将其分解为适当的单独参数。在这个具体的例子中我该如何做到这一点?

我的具体问题是如何更改这一行:

process = subprocess.Popen(cmd, shell=True, ...
Run Code Online (Sandbox Code Playgroud)

变成这样的形式:

process = subprocess.Popen([prog, inf, arate, outf], shell=False, ...
Run Code Online (Sandbox Code Playgroud)

这是我的完整代码,以便上面的片段有意义:

#!/usr/bin/env python

import sys
import subprocess
import os.path
import argparse #requires Python 2.7 or above

parser = argparse.ArgumentParser(description='Converts (.M4V) videos into (.MP3) audio files using ffmpeg.')
parser.add_argument('-d','--directory', help='Source directory name',required=True)
parser.add_argument('-o','--output',help='Output directory name', required=False)
parser.add_argument('-a','--arate',help='ffmpeg\'s arate option', default="64K", required=False)
parser.add_argument('-s','--source',help='Input type; e.g., file ext (default .m4v)', default=".m4v", required=False)
parser.add_argument('-e','--ext',help='Output …
Run Code Online (Sandbox Code Playgroud)

python linux bash shell popen

2
推荐指数
1
解决办法
6844
查看次数

为什么在 if __name__ == "__main__" 下使用 manage.py 执行脚本会运行两次

目标。启动 django 框架时,也会启动其他依赖 django 对象的 PY 脚本。从配置文件中获取服务器和端口号。

问题:Popen 似乎运行了两次,我不知道为什么?

#!/usr/bin/env python
import os
import sys
import subprocess
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "test.localsettings")
from django.core.management import execute_from_command_line

def getargs(): 
    try:
        f = open("config")
        data = []
        for line in f:
            data.append(line)
        f.close()
        server = data[0].rstrip()
        port = data[1]
        newargs = ['lmanage.py', 'runserver', server + ':' + port]
        return newargs

    except Exception as e:
        print e
        pass

if __name__ == "__main__":

    #Launching Checker
    try: 
        checker = subprocess.Popen([sys.executable, os.path.join(os.getcwd() + "checker.py")], stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
        print checker.pid …
Run Code Online (Sandbox Code Playgroud)

python django popen

2
推荐指数
1
解决办法
1200
查看次数

Linux中的双向管道

因此,如果我在gcc stdio.h中使用popen(),我可以将父级的stdout传递给其子级的stdin,或者我可以将子级的stdout传递给父级的stdin.我想同时做两件事.有没有办法使用popen来做到这一点,或者我是否需要使用较低级别的工具(如共享内存)来完成这项工作?

注意:在FreeBSD中看起来popen可以用"r +"进行读写.我不明白孩子的stdout是如何通过管道输送到父母和父母的标准输出.不管怎么说,这可能对我有用,但在Linux中似乎并非如此.如果我在这一点上弄错了,那就会回答我的问题.以下是我收到此说明的链接:https://www.freebsd.org/cgi/man.cgi?query = popen&sektion = 3

注2:我更喜欢按照优先顺序在几乎所有Linux发行版,FreeBSD和OSX上移植的解决方案.话虽这么说,我很乐意至少让它在Ubuntu 14.04中运行.

c linux popen

2
推荐指数
1
解决办法
1122
查看次数

Python:使用 subprocess.Popen 加载 python 脚本时传递 sys.argv

我有一个使用 subprocess.Popen 打开文件的脚本,这样我就可以在后台运行它。我希望能够使用 ./[script] [params] 运行此脚本

#!/usr/bin/python
import subprocess
import sys
sys.path.insert(0,"./pyqt")
import gui

if __name__ == "__main__":
    subprocess.Popen(["python", "./pyqt/gui.py"])
Run Code Online (Sandbox Code Playgroud)

gui.py 可以使用 sys.argv 从终端运行时获取参数。下面是我如何在 gui.py 中访问这些参数

def main(*args):
    print(args)

if __name__ == "__main__":
    main(sys.argv)
Run Code Online (Sandbox Code Playgroud)

如何将 sys.argv 传递到 subprocess.Popen 中?

python subprocess popen sys

2
推荐指数
1
解决办法
3748
查看次数

popen() 如何工作以及如何在 Linux 上将其实现为 C++ 代码?

我在找出如何使用popen()将标准输出从 Linux 中的子程序获取到主 C++ 程序时遇到了麻烦。我环顾四周,发现这段代码可以完成我想要它做的事情。但我无法理解这些东西是如何工作的。我知道 C++ 编程的基础知识(我已经做了几个月了)但是我很困惑所以有人可以帮我解释一下吗?

先感谢您。

#include <vector>
#include <string>
#include <stdio.h>
#include <iostream>

using namespace std;

void my_popen( const string& cmd ,vector<string>& out ){
    FILE*  fp;
    const int sizebuf=1234;
    char buff[sizebuf];
    out = vector<string> ();
    if ((fp = popen (cmd.c_str (), "r"))== NULL){

}
    string cur_string = "";
    while (fgets(buff, sizeof (buff), fp)) {
        cur_string += buff;
}
    out.push_back (cur_string.substr (0, cur_string.size() -1));
    pclose(fp);
}




int main () {

    vector<string> output;
    my_popen("which driftnet", output);
    for …
Run Code Online (Sandbox Code Playgroud)

c++ popen

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

使用 C popen(): read() 有效,但 fread() 无效

在 popen() 之后,fread() 总是返回 0。将 read() 与 fileno(fp) 一起使用是可行的。这是怎么回事?

这是代码。

#include <errno.h>
#include <stdio.h>
#include <unistd.h>


int main(int argc, char *argv[]) {
    FILE *fp = popen("echo hello", "r");
    if (!fp) {
        perror("echo hello");
    } else {
        char buffer[128];
        for (;;) {
            int n;
            if (argc < 2) {
                n = fread(buffer, sizeof buffer, 1, fp);
            } else {
                n = read(fileno(fp), buffer, sizeof buffer);
            }
            printf("read %d bytes\n", n);
            if (n <= 0) break;
            fwrite(buffer, n, 1, stdout);
        }
        pclose(fp); …
Run Code Online (Sandbox Code Playgroud)

c popen fread

2
推荐指数
1
解决办法
40
查看次数

标签 统计

popen ×10

python ×5

c ×2

linux ×2

subprocess ×2

bash ×1

c++ ×1

communicate ×1

django ×1

eof ×1

fread ×1

posix ×1

python-2.7 ×1

rake ×1

ruby ×1

ruby-on-rails ×1

shell ×1

sys ×1

windows ×1