小编rob*_*bev的帖子

Python:在Windows上启动新的命令提示符并等待它完成/退出

我不明白为什么在Windows上这么做很难.

我想生成一堆命令提示符窗口,它将运行其他脚本.我想要这个的原因是我可以整齐地看到每个脚本的所有输出(如果我只是在主窗口中的线程/子进程我无法正确查看所有输出).我也不想记录输出,因为它主要用于查看进度条,它实际上不适用于日志文件.

所以我的要求的各个部分都有效,但不是在一起:

os.system("start cmd /c {command here}")     # Launches in new command prompt, closes when done
Run Code Online (Sandbox Code Playgroud)

但是,os系统不会让我等到命令完成(因为start是实际的命令,第二次打开新的命令提示符它已经"完成")

同样,如果我尝试:

p = subprocess.Popen(["start", "cmd", "/k", "{command here}], shell = True) # Needs to be shell since start isn't an executable, its a shell cmd
p.wait()    # I can wait until finished (although it too finishes after start finishes)
Run Code Online (Sandbox Code Playgroud)

那我该怎么做?我在某处读到一个解决方案可能是使用进程组,但它只是unix ....或类似的东西

或者如果你有一个巧妙的方法在一个窗口中显示所有子进程的输出,那么我不需要打开一个新的命令提示符,只需使用线程.这也有效,但如果我让4个线程下载东西并显示进度条以及输出其他信息我不知道如何以可以读取的方式显示(以及避免它们全部碰撞彼此).

PS:这是在Windows Vista上.PPS:我最好喜欢适用于Windows,Linux和Mac的解决方案,我现在专注于Windows,但我想要一个适用于所有三种解决方案的解决方案,我知道Windows是最挑剔的.我只是将"start cmd/c"替换为OS适当的命令.

python windows

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

使用不完整类型结构无效,即使使用前向声明也是如此

我知道循环依赖,但即使使用前向声明,我也会得到这个区域.我究竟做错了什么?

// facility.h
class Area;

class Facility {
public:
    Facility();
    Area* getAreaThisIn();
    void setAreaThisIsIn(Area* area);
private:
    Area* __area;
};

// facility.cpp
#include "facility.h"
#include "area.h"
{ ... }

// area.h
class Facility;
class Area {
public:
    Area(int ID);
    int getId();

private:
    std::list<Facility*> _facilities;
};

// area.cpp
#include "area.h"
#include "facility.h"
Run Code Online (Sandbox Code Playgroud)

所以这个编译很好,但如果我这样做

// foo.h
#include "facility.h"
class Foo { .. };

// foo.cpp
#include "foo.h"
void Foo::function() {
    Facility* f = new Facility();
    int id = f->getAreaThisIsIn()->getId();
Run Code Online (Sandbox Code Playgroud)

当我得到 invalid use of …

c++ forward-declaration

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

在python中按整数后缀排序字符串列表

我有一个字符串列表:

[song_1, song_3, song_15, song_16, song_4, song_8]
Run Code Online (Sandbox Code Playgroud)

我想用最后的#对它们进行排序,不幸的是,由于较低的数字不是"08"并且是"8",它们在字典顺序中被视为大于15.

我知道我必须将一个密钥传递给sort函数,我在这个网站的某个地方看到这个字符串的十进制数字:

sorted(the_list, key=lambda a:map(int,a.split('.'))
Run Code Online (Sandbox Code Playgroud)

但那是"1.2,2.5,2.3",但我没有那种情况.我想过要替换'.' 使用'_'但是根据我的理解,它将双方转换为整数,这将失败,因为_的左侧是一个字符串.

任何帮助,将不胜感激

编辑:我忘了提到所有的前缀是相同的(本例中的歌曲)

python

6
推荐指数
2
解决办法
7866
查看次数

有条件地修改全局变量

我想做这样的事情,但我得到一个SyntaxWarning并且它没有按预期工作

RAWR = "hi"
def test(bool):
    if bool:
        RAWR = "hello"   # make RAWR a new variable, don't reference global in this function
    else:
        global RAWR
        RAWR = "rawr"    # reference global variable in this function
    print RAWR           # if bool, use local, else use global (and modify global)
Run Code Online (Sandbox Code Playgroud)

我如何让它工作?传入True或False会修改全局变量.

python

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

直观展示算法进度

我试图直观地展示处理中的一些算法(但实际上,这个问题适用于任何具有 GUI 框架的语言)。我的问题是,一个带有根据每秒帧数更新的绘制循环的程序,如何执行算法并更新它的视觉显示?

一个例子是,如果我将随机值数组显示为条形图。我想使用不同的排序(冒泡排序、快速排序、合并排序)对该数组进行排序。如何通过在新的动画帧中显示每个交换来显示算法的每个步骤?

或者另一个例子是路径查找。我想展示BFS、DFS、A*的步骤,而不仅仅是最终的解决方案路径(所有搜索到的pats)。

我正在寻找的视觉效果的示例可以在有关这些算法的维基百科文章中找到:

http://en.wikipedia.org/wiki/Quicksort

http://en.wikipedia.org/wiki/File:Astar_progress_animation.gif

问题是,当算法完成时,绘制循环仅循环一次,因此用户看不到进度。

我唯一能想到的是有一个“状态”对象,其中包含算法每个步骤的相关值。完成后,循环遍历每个状态并直观地显示它。有没有更好的办法?

java processing

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

Git ref master现在空了,怎么恢复?

我不完全确定发生了什么,但由于某种原因,我的git存储库的主ref文件现在是空的.我们正在Dropbox上托管存储库,所以也许它与此有关..但现在我无法从中拉出来.它说:

Your configuration specifies to merge with the ref 'master' from the remote, but no such ref was fetched.
Run Code Online (Sandbox Code Playgroud)

Dropbox保留文件的版本,所以如果我回到以前版本的'master',它会说:

fatal: object 2d154f82e59a4156a5d3ea04a0617c243ae6dc3a is corrupted
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)

我该如何从中恢复?

git dropbox

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

Python:在Linux上启动新终端并等待它完成/退出

与我的另一个问题相同的情况:Python:在Windows上启动新的命令提示符并等待它完成/退出,除了我需要它在Linux上工作.

如果你不想阅读另一个问题:我想打开一些新的终端窗口并让每个执行一个命令,我希望父python程序等到所有终端窗口关闭.

这样做:

os.system("gnome-terminal -e {command}")
Run Code Online (Sandbox Code Playgroud)

打开一个新的终端窗口,但程序不会等待.使用p = Popen()p.wait()不起作用,因为gnome-terminal命令立即完成.

python linux ubuntu

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

由于使用代理,Git和NPM失败

由于某种原因,最近我无法使用git推送到github,或者使用npm来安装节点模块.(我使用的是Windows 10)

我用git得到这个错误:

$ git push origin master fatal: unable to access
'https://github.com/$$$/$$$.git/': SSL certificate problem:
unable to get local issuer certificate
Run Code Online (Sandbox Code Playgroud)

我用npm得到这个错误:

npm install --save-dev webpack
npm WARN package.json 613@1.0.0 No description
npm WARN package.json 613@1.0.0 No README data
npm ERR! Windows_NT 10.0.14393
npm ERR! argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "--save-dev" "webpack"
npm ERR! node v4.4.4
npm ERR! npm  v2.15.1
npm ERR! code UNABLE_TO_VERIFY_LEAF_SIGNATURE

npm ERR! unable to verify the first certificate
npm ERR!
npm ERR! If you …
Run Code Online (Sandbox Code Playgroud)

git ssl github node.js

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

在函数调用c ++中连接字符串

我正在尝试创建一个记录器功能,您可以在其中传递将记录到文本文件的消息.有时我想传入一个与我的消息连接的变量,所以我可以做类似的事情:

logger("The variable is: " + variable);
Run Code Online (Sandbox Code Playgroud)

该功能定义为

void logger(std::string message);
Run Code Online (Sandbox Code Playgroud)

我正在使用Qt,所以我不知道它是否相关,但变量将永远是QString.当我尝试这个时,它会说没有候选功能

void logger(const QString);
Run Code Online (Sandbox Code Playgroud)

所以我想为什么不做第二个功能,它会期望连接:

void logger(std::string message);
void logger2(const QString message);
Run Code Online (Sandbox Code Playgroud)

我做的时候编好了

logger2("The variable is: " + variable);
Run Code Online (Sandbox Code Playgroud)

但是,当我调试传递的消息变量时,它是一个空字符串.我如何让它工作,是否可能?

c++ qt

0
推荐指数
1
解决办法
3075
查看次数

标签 统计

python ×4

c++ ×2

git ×2

dropbox ×1

forward-declaration ×1

github ×1

java ×1

linux ×1

node.js ×1

processing ×1

qt ×1

ssl ×1

ubuntu ×1

windows ×1