要从我的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
我有一个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但仍然将输出传递给日志文件?
在JSF支持Bean(Managed Bean的,虚焊豆,无所谓),我可以得到上下文路径的客户端是通过调用
FacesContext ctx = FacesContext.getCurrentInstance();
String path = ctx.getExternalContext().getRequestContextPath();
Run Code Online (Sandbox Code Playgroud)
这给了我客户端当前访问的路径,比如/myapplication.是否也可以得到当前页面,就像/home.faces,怎么样?
我正在开发一个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) 由于CDI(及其实现Weld),JEE6中的每个POJO都可以注释@Named,这使得POJO可以被视图访问.
这是否意味着ManagedBeans现在已经完全过时了?还是我错过了@ManagedBean仍然有意义的东西?
在我的Bash脚本中,我正在阅读用户使用READ输入的一些变量:
read -p "Glassfish Path:" GF_DIR
Run Code Online (Sandbox Code Playgroud)
现在我希望用户在必须进入目录时获得自动完成功能,就像你在Bash shell上一样.所以当他输入目录的第一个字母时,他可以通过点击TAB自动填充它.那可能吗?
我正在运行Ubuntu 11.04.我安装了终结者终端仿真器 0.95和Zsh,版本4.3.15.
我在Zsh里面的键有(众所周知的)问题.至少这些:
我已经尝试过.zshrc的一些配置来解决这个问题,但到目前为止还没有真正有效的方法.也许这与终结者和Zsh的组合有关.我在这个页面上看了2个配置:https://bbs.archlinux.org/viewtopic.php?pid = 428669.
是否有人有类似的配置(特别是终结者和Zsh)并找出需要插入.zshrc以修复密钥设置的内容?
我正在使用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容器)?
在基于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) 我目前正在创建一个EJB3数据访问类来处理我的Java EE 6应用程序中的所有数据库操作.现在,由于Java EE 6提供了新的ApplicationScoped注释,我想知道我的EJB应该具有什么状态,或者它应该是无状态的.
让DAO成为@Stateless会话Bean或@ApplicationScopedBean 会更好吗?怎么样@Singleton?这些与DAO相关的选项有何不同?
编辑: 我正在使用Glassfish 3.0.1与完整的Java EE 6平台