Java应用程序是否可以使用其名称(而不是其位置)以独立于平台的方式加载到单独的进程中?
我知道你可以通过...执行一个程序
Process process = Runtime.getRuntime().exec( COMMAND );
Run Code Online (Sandbox Code Playgroud)
...这种方法的主要问题是这种调用是特定于平台的.
理想情况下,我将方法包装成简单的方法......
EXECUTE.application( CLASS_TO_BE_EXECUTED );
Run Code Online (Sandbox Code Playgroud)
...并传入应用程序类的完全限定名称CLASS_TO_BE_EXECUTED.
我想从Kotlin代码调用外部命令.在C/Perl中,我会使用system()函数; 在Python中,我会使用子进程模块; 在Go中,我会使用os/exec; 等等.但是,我怎么在Kotlin这样做呢?
我需要在运行时为方法生成代码.能够运行任意代码并拥有文档字符串非常重要.
我想出了一个解决方案相结合exec,并setattr,这里是一个虚拟的例子:
class Viking(object):
def __init__(self):
code = '''
def dynamo(self, arg):
""" dynamo's a dynamic method!
"""
self.weight += 1
return arg * self.weight
'''
self.weight = 50
d = {}
exec code.strip() in d
setattr(self.__class__, 'dynamo', d['dynamo'])
if __name__ == "__main__":
v = Viking()
print v.dynamo(10)
print v.dynamo(10)
print v.dynamo.__doc__
Run Code Online (Sandbox Code Playgroud)
是否有更好/更安全/更惯用的方式来实现相同的结果?
谁能告诉我如何从PHP脚本执行.bat文件?
我试过了:
exec("C:\[path to file]");
system("C:\[path to file]");
Run Code Online (Sandbox Code Playgroud)
什么都行不通.我检查了PHP手册并用Google搜索,但找不到一个好的答案.谁知道我哪里出错了?
我正在运行Windows 2003 Server并成功手动运行.bat文件,它完成了我需要的操作; 我只需要能够以编程方式启动它.
我有一个Python脚本,我想用作另一个Python脚本的控制器.我有一个64位处理器的服务器,所以想要产生第二个Python脚本的64个子进程.子脚本被调用:
$ python create_graphs.py --name=NAME
Run Code Online (Sandbox Code Playgroud)
其中NAME是XYZ,ABC,NYU等.
在我的父控制器脚本中,我从列表中检索名称变量:
my_list = [ 'XYZ', 'ABC', 'NYU' ]
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,作为孩子产生这些过程的最佳方法是什么?我想一次将子项数限制为64,因此需要跟踪状态(如果子进程已完成或未完成),这样我就可以有效地保持整个代的运行.
我查看了使用子进程包,但拒绝它,因为它一次只生成一个子进程.我终于找到了多处理器包,但我承认被整个线程与子进程文档所淹没.
现在,我的脚本subprocess.call一次只生成一个孩子,看起来像这样:
#!/path/to/python
import subprocess, multiprocessing, Queue
from multiprocessing import Process
my_list = [ 'XYZ', 'ABC', 'NYU' ]
if __name__ == '__main__':
processors = multiprocessing.cpu_count()
for i in range(len(my_list)):
if( i < processors ):
cmd = ["python", "/path/to/create_graphs.py", "--name="+ my_list[i]]
child = subprocess.call( cmd, shell=False )
Run Code Online (Sandbox Code Playgroud)
我真的希望它一次产生64个孩子.在其他stackoverflow问题中,我看到人们使用Queue,但似乎这会产生性能损失?
我试图以XML格式获取svn命令的某些输出.输入有效参数时输出正常.但是,当我输入错误的密码时,输出不会显示错误消息.这是PHP代码:
exec('/usr/bin/svn --username something --password something --non-interactive log -r HEAD --xml --verbose http://a51.unfuddle.com/svn/a51_activecollab/', $output);
Run Code Online (Sandbox Code Playgroud)
这是我在终端输出的输出:
<?xml version="1.0"?>
<log>
svn: OPTIONS of 'http://a51.unfuddle.com/svn/a51_activecollab': authorization failed: Could not authenticate to server: rejected Basic challenge (http://a51.unfuddle.com)
Run Code Online (Sandbox Code Playgroud)
这是我从var_dump的$ output变量得到的输出:
array(2) {
[0]=>
string(21) "<?xml version="1.0"?>"
[1]=>
string(5) "<log>"
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,$ output变量不会返回第三行输出,其中终端也是如此.请帮助我获得与终端相同的输出(我甚至尝试使用shell_exec()或system()方法,但它们返回与exec()相同的输出)如何获得完整输出?先感谢您!
我试图通过Java执行命令行参数.例如:
// Execute command
String command = "cmd /c start cmd.exe";
Process child = Runtime.getRuntime().exec(command);
// Get output stream to write from it
OutputStream out = child.getOutputStream();
out.write("cd C:/ /r/n".getBytes());
out.flush();
out.write("dir /r/n".getBytes());
out.close();
Run Code Online (Sandbox Code Playgroud)
以上打开命令行但不执行cd或dir.有任何想法吗?我正在运行Windows XP,JRE6.
(我已将我的问题修改为更具体.以下答案有帮助,但不回答我的问题.)
我正在写一个C程序中我fork(),exec()和wait().我想把我执行的程序的输出写入文件或缓冲区.
例如,如果我exec ls 我想写入file1 file2 etc缓冲区/文件.我认为没有办法读取标准输出,所以这是否意味着我必须使用管道?这里有一个我无法找到的一般程序吗?
下面的代码给出了不同的输出Python2和在Python3:
from sys import version
print(version)
def execute(a, st):
b = 42
exec("b = {}\nprint('b:', b)".format(st))
print(b)
a = 1.
execute(a, "1.E6*a")
Run Code Online (Sandbox Code Playgroud)
Python2 打印:
2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]
('b:', 1000000.0)
1000000.0
Run Code Online (Sandbox Code Playgroud)
Python3 打印:
3.2.3 (default, Apr 11 2012, 07:15:24) [MSC v.1500 32 bit (Intel)]
b: 1000000.0
42
Run Code Online (Sandbox Code Playgroud)
为什么Python2将函数b内部的变量绑定到execute函数字符串中的exec值,Python3而不执行此操作?我怎样才能实现Python2in 的行为Python3?我已经尝试将全局和本地的字典传递给exec函数Python3,但到目前为止还没有任何工作.
---编辑---
在阅读了Martijns的回答后,我进一步分析了这一点 …
exec ×10
php ×3
python ×3
java ×2
batch-file ×1
c ×1
fork ×1
kotlin ×1
linux ×1
process ×1
python-2.7 ×1
python-3.x ×1
subprocess ×1
svn ×1
system ×1
unix ×1
xml ×1