当前位置: 首页 > 知识库问答 >
问题:

用Java实现Python触发器中的文件处理

洪涵亮
2023-03-14

我想用Python脚本自动执行一些任务。基本应用程序是用 Java 编写的。触发我使用的Python内容

 Process p = Runtime.getRuntime().exec(PYLOCATION + " " + pyScript + " " + ARGS)

所以起初我只是尝试在python脚本上创建一个目录:

#! python3
import sys,shelve,os

filename = 'log.txt'
logfile = open(filename,'w')
path = sys.argv[1]
path = os.path.abspath(path)
logfile.write(str(path))
logfile.close()

if not os.path.exists(path):
   os.mkdir(path)

如果我将新目录的路径作为绝对路径传递,例如

static final String ARGS = "G:\\SNMP_Tool\\PythonScripts\\defaultDataBase";

它工作正常

如果我通过它相对像

static final String ARGS = "..\\PythonScripts\\defaultDataBase";

它不起作用。(如果我直接在python脚本中输入相对路径的字符串,它就会工作。)

如果任务从Java应用程序开始,日志文件log.txt永远不会写入。

如果我只是用鼠标点击. py脚本两次,它会按应有的方式写入日志文件。

我认为写文件的问题可能是来自windows的授权。

但是为什么不采用参数字符串的相对路径呢?

谢谢你的回答

共有1个答案

胡新
2023-03-14

我能想到两种方法:

>

  • 在 Java 脚本中,将文件解析为绝对路径,然后再将其传递给 Python 脚本,或者
  • 使用指定工作目录的 exec 形式:

    String[] args = {pyScript, ARGS};
    Process p = Runtime.getRuntime().exec(
            PYLOCATION,
            args, 
            new File("G:\....."))
    

  •  类似资料:
    • 我正在尝试使用Spark结构化流的功能,触发一次,来模拟一个类似的批处理设置。然而,当我运行我的初始批处理时,我遇到了一些麻烦,因为我有很多历史数据,因此我也使用了这个选项。选项(" cloud files . includeexistingfiles "," true ")也处理现有文件。 因此,我的初始批处理变得非常大,因为我无法控制批处理的文件量。 我也尝试过使用选项 cloudFiles.

    • 本文向大家介绍javascript的事件触发器介绍的实现,包括了javascript的事件触发器介绍的实现的使用技巧和注意事项,需要的朋友参考一下 事件触发器从字面意思上可以很好的理解,就是用来触发事件的,但是有些没有用过的朋友可能就会迷惑了,事件不是通常都由用户在页面上的实际操作来触发的吗?这个观点不完全正确,因为有些事件必须由程序来实现,如自定义事件,jQuery的ajax框架的一些自定义事件

    • 问题内容: 我想在hibernate中实现类似于触发器的功能。 我需要的是当表中的列达到特定值时,应在另一张表中插入一行,或者应更新某些其他表。 如何在hibernate状态下实现呢? 问题答案: 这在第14章中进行了描述。 例如,您可以拦截更新后事件。 但是,将事件系统用于 业务 运营可能不是最好的主意(它们最适合用于基础结构问题)。您应该为此使用更高级别的层。

    • 本文向大家介绍Java中用内存映射处理大文件的实现代码,包括了Java中用内存映射处理大文件的实现代码的使用技巧和注意事项,需要的朋友参考一下 在处理大文件时,如果利用普通的FileInputStream 或者FileOutputStream 抑或RandomAccessFile 来进行频繁的读写操作,都将导致进程因频繁读写外存而降低速度.如下为一个对比实验。 测试文件为一个大小为1253244字

    • 问题内容: 当有人 使用鼠标在页面上 选择给定的文本片段时, 如何 触发JavaScript函数 ? 另外,有什么方法可以 找到所选文本 在页面上的 位置 吗? 更新:更清楚地说,文本片段可以是句子或单词或短语的一部分,也可以是整个段落。 问题答案: 没有“ 选择了文本 ” 事件,但是您可以将事件绑定到。在该事件处理程序中,您可能只需检查 要么 方法。关于Stackoverflow有几个主题,例如

    • 我有一个 Blob 存储容器,其中配置了事件网格触发器(Blob 已创建)。我正在通过数据工厂加载此 blob 存储文件,很多时候,许多文件可能会在一次尝试中出现在此 blob 中。也许我们可以举一个20个文件的例子。 好消息是我的事件网格触发器启动了,函数app被调用。然而,我发现有时对于同一个文件,事件网格触发器被触发了不止一次。 在这20个文件中,很少有文件非常大,比如300 MB,但其他文