小编Ing*_*her的帖子

在进程运行时不断打印Subprocess输出

要从我的Python脚本启动程序,我使用以下方法:

def execute(command):
    process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    output = process.communicate()[0]
    exitCode = process.returncode

    if (exitCode == 0):
        return output
    else:
        raise ProcessException(command, exitCode, output)
Run Code Online (Sandbox Code Playgroud)

因此,当我启动一个类似的过程时Process.execute("mvn clean install"),我的程序会一直等到过程结束,然后我才能获得程序的完整输出.如果我正在运行需要一段时间才能完成的过程,这很烦人.

我可以让我的程序逐行写入进程输出,通过在循环结束之前轮询进程输出或其他内容吗?

**[编辑]抱歉,在发布此问题之前我没有很好地搜索.线程实际上是关键.在这里找到一个示例,说明如何执行此操作:** 来自线程的Python Subprocess.Popen

python subprocess

175
推荐指数
9
解决办法
16万
查看次数

管道命令输出到tee但也保存命令的退出代码

我有一个shell脚本,我在其中包装一个命令(mvn clean install),将输出重定向到日志文件.

#!/bin/bash
...
mvn clean install $@ | tee $logfile
echo $? # Does not show the return code of mvn clean install
Run Code Online (Sandbox Code Playgroud)

现在,如果mvn clean install失败并出现错误,我希望我的包装器shell脚本也会因该错误而失败.但是因为我将所有输出都传递给tee,所以我无法访问返回代码mvn clean install,所以当我$?之后访问时,它总是0(因为tee成功).

我尝试让命令将错误输出写入单独的文件并在之后检查,但mvn的错误输出始终为空(看起来它只写入stdout).

如何保留返回代码mvn clean install但仍然将输出传递给日志文件?

bash shell pipe sh tee

150
推荐指数
3
解决办法
5万
查看次数

以编程方式获取当前页面

在JSF支持Bean(Managed Bean的,虚焊豆,无所谓),我可以得到上下文路径的客户端是通过调用

FacesContext ctx = FacesContext.getCurrentInstance();
String path = ctx.getExternalContext().getRequestContextPath();
Run Code Online (Sandbox Code Playgroud)

这给了我客户端当前访问的路径,比如/myapplication.是否也可以得到当前页面,就像/home.faces,怎么样?

java jsf jsf-2

62
推荐指数
2
解决办法
7万
查看次数

使用枚举类型作为@ RolesAllowed-Annotation的值参数

我正在开发一个Java企业应用程序,目前正在使用Java EE安全性来限制特定用户对特定功能的访问.我配置了应用程序服务器和所有内容,现在我使用RolesAllowed-annotation来保护方法:

@Documented
@Retention (RUNTIME)
@Target({TYPE, METHOD})
public @interface RolesAllowed {
    String[] value();
}
Run Code Online (Sandbox Code Playgroud)

当我使用这样的注释时,它工作正常:

@RolesAllowed("STUDENT")
public void update(User p) { ... }
Run Code Online (Sandbox Code Playgroud)

但这不是我想要的,因为我必须在这里使用String,重构变得困难,并且可能发生拼写错误.因此,我想使用Enum值作为此注释的参数,而不是使用String.Enum看起来像这样:

public enum RoleType {
    STUDENT("STUDENT"),
    TEACHER("TEACHER"),
    DEANERY("DEANERY");

    private final String label;

    private RoleType(String label) {
        this.label = label;
    }

    public String toString() {
        return this.label;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我尝试使用Enum作为这样的参数:

@RolesAllowed(RoleType.DEANERY.name())
public void update(User p) { ... }
Run Code Online (Sandbox Code Playgroud)

但是后来我得到了以下编译器错误,虽然Enum.name只返回一个String(它总是不变的,不是吗?).

注释属性RolesAllowed.value的值必须是常量表达式`

我尝试的下一件事是在我的枚举中添加一个额外的最终字符串:

public enum RoleType {
    ...
    public static final String STUDENT_ROLE = STUDENT.toString();
    ...
}
Run Code Online (Sandbox Code Playgroud)

但这也不能作为参数,导致相同的编译器错误:

// The …
Run Code Online (Sandbox Code Playgroud)

java enums annotations java-ee java-ee-6

55
推荐指数
4
解决办法
3万
查看次数

由于CDI/Weld中的@Named,@ ManagedBeans在JavaEE6中是否已过时?

由于CDI(及其实现Weld),JEE6中的每个POJO都可以注释@Named,这使得POJO可以被视图访问.

这是否意味着ManagedBeans现在已经完全过时了?还是我错过了@ManagedBean仍然有意义的东西?

jsf java-ee jsf-2 jboss-weld

41
推荐指数
4
解决办法
2万
查看次数

在Bash脚本中调用READ时获取自动完成功能

在我的Bash脚本中,我正在阅读用户使用READ输入的一些变量:

read -p "Glassfish Path:" GF_DIR
Run Code Online (Sandbox Code Playgroud)

现在我希望用户在必须进入目录时获得自动完成功能,就像你在Bash shell上一样.所以当他输入目录的第一个字母时,他可以通过点击TAB自动填充它.那可能吗?

bash bash-completion

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

在终结者终端仿真器中运行Zsh时,修复.zshrc中的键设置(Home/End/Insert/Delete)

我正在运行Ubuntu 11.04.我安装了终结者终端仿真器 0.95和Zsh,版本4.3.15.
我在Zsh里面的键有(众所周知的)问题.至少这些:

  • Home/End,没有任何反应
  • Insert/Delete/PageUp/PageDown:输入"〜"

我已经尝试过.zshrc的一些配置来解决这个问题,但到目前为止还没有真正有效的方法.也许这与终结者和Zsh的组合有关.我在这个页面上看了2个配置:https://bbs.archlinux.org/viewtopic.php?pid = 428669.

是否有人有类似的配置(特别是终结者和Zsh)并找出需要插入.zshrc以修复密钥设置的内容?

ubuntu zsh keyboard-shortcuts zshrc terminator

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

JSF 2.0:为selectOneMenu使用Enum值

我正在使用JSF 2.0,并希望用我的Enum的值填充selectOneMenu.一个简单的例子:

// Sample Enum
public enum Gender {
  MALE("Male"),
  FEMALE("Female");

  private final String label;

  private Gender(String label) {
    this.label = label;
  }

  public String getLabel() {
    return this.label;
  }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不能将Seam用于我当前的项目,该项目有一个很好的<s:convertEnum/>标签可以完成大部分工作.在Seam中,要使用Enum的值,我必须编写以下标记(并创建一个提供以下内容的工厂#{genderValues}:

<!-- the Seam way -->
<h:selectOneMenu id="persongender" value="#{person.gender}">
  <s:selectItems var="_gender" value="#{genderValues}"" label="#{_gender.label}"/>
  <s:convertEnum/>
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)

结果是我不必在标记内明确声明枚举值.我知道在JSF <2.0中这不是很容易,但JSF2中是否有任何新的东西来帮助解决这个问题?或者Weld在某种程度上帮助了吗?如果JSF2中没有新内容,那么在JSF 1.2中最简单的方法是什么?

或者我甚至可以集成Seam JSF标记和相应的Seam类来在JavaEE6-App中获得相同的功能(没有Seam容器)?

jsf java-ee jsf-2 jboss-weld

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

Python fcntl没有按预期锁定

在基于Debian的操作系统(Ubuntu,Debian Squeeze)上,我使用Python(2.7,3.2)fcntl来锁定文件.据我所知,fnctl.flock以某种方式锁定文件,如果另一个客户端想要锁定同一个文件,则会抛出异常.

我构建了一个小例子,我希望抛出一个例外,因为我先锁定文件,然后,我立即尝试再次锁定它:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import fcntl
fcntl.flock(open('/tmp/locktest', 'r'), fcntl.LOCK_EX)
try:
    fcntl.flock(open('/tmp/locktest', 'r'), fcntl.LOCK_EX | fcntl.LOCK_NB)
except IOError:
    print("can't immediately write-lock the file ($!), blocking ...")
else:
    print("No error")
Run Code Online (Sandbox Code Playgroud)

但该示例只是打印"无错误".

如果我将此代码分割为两个同时运行的客户端(一个锁定然后等待,另一个在第一个锁已经激活后尝试锁定),我得到相同的行为 - 完全没有效果.

对这种行为的解释是什么?

编辑:

根据nightcracker的要求进行更改,此版本还会打印"No error",尽管我不希望这样:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import fcntl
import time
fcntl.flock(open('/tmp/locktest', 'w'), fcntl.LOCK_EX | fcntl.LOCK_NB)
try:
    fcntl.flock(open('/tmp/locktest', 'w'), fcntl.LOCK_EX | fcntl.LOCK_NB)
except IOError:
    print("can't immediately write-lock the file ($!), blocking ...")
else:
    print("No error")
Run Code Online (Sandbox Code Playgroud)

python fcntl

23
推荐指数
4
解决办法
3万
查看次数

JavaEE6 DAO:应该是@Stateless还是@ApplicationScoped?

我目前正在创建一个EJB3数据访问类来处理我的Java EE 6应用程序中的所有数据库操作.现在,由于Java EE 6提供了新的ApplicationScoped注释,我想知道我的EJB应该具有什么状态,或者它应该是无状态的.

让DAO成为@Stateless会话Bean或@ApplicationScopedBean 会更好吗?怎么样@Singleton?这些与DAO相关的选项有何不同?

编辑: 我正在使用Glassfish 3.0.1与完整的Java EE 6平台

java ejb java-ee java-ee-6 ejb-3.1

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