我们有一个Perl程序来验证从Java程序调用的XML.它无法写入标准错误并挂在打印位置.
Perl正在写入STDERR,java程序正在使用getErrorStream()函数读取STDERR.但是Perl程序暂时写入STDERR.我怀疑Java函数完全阻塞了STDERR流,Perl正在等待这个流被释放.
在Perl中是否有办法克服这种阻塞并强行写入标准错误?由于Java只进行读取,因此API不应该按照java doc锁定STDERR流.
Perl Code代码段是:
sub print_error
{
print STDERR shift;
}
Run Code Online (Sandbox Code Playgroud)
Java代码段是:
while ( getErrorStream() != null )
{
SOP errorMessage;
}
Run Code Online (Sandbox Code Playgroud)
提前感谢您的帮助.
谢谢,Mathew Liju
我们有一个 C++ Web 服务,它会根据每个请求生成子进程。因此,每个孩子都会创建自己的日志文件。我们将 cout 和 cerr 流绑定到一个文件以捕获所有“std::cout”和“std::cerr”。
但是,该服务使用另一个“C”组件来执行一些旧操作。C组件使用“fprintf(stdout,xxx)”和“fprintf(stderr,xxx)”来打印日志。
这些消息不会打印到“cout”和“cerr”日志文件中。相反,它会打印在提示中。我们需要这些 stdout/stderr 消息也转到相应的子日志文件。
有没有一种方法可以将“stdout”和“stderr”也绑定到绑定“cout”和“cerr”的同一文件。
有类似的问题,但没有多语言代码混合示例。
让我知道。
谢谢
我们正在考虑Perl项目中的公共代码.一个主程序应分成几个可重用的模块.
我们的程序名称validate_results.pl
包含一组验证命令.我们计划将其拆分为小模块,因此validate_results.pl
应该像:
use Common::Validate_Results;
use Common::Validate_Results::CommonCommands;
use Common::Validate_Results::ReturnCodeValidation;
...
Run Code Online (Sandbox Code Playgroud)
根据我的理解,我应该创建一个Common文件夹,并且Validate_Results.pm
应该存在.再次下Common
,Validate_Results
应该创建文件夹,并在其下面CommonCommands
,ReturnCodeValidation
文件夹应该存在.
是否必须存在所有这些文件夹,或者我们是否可以将所有Perl程序放在一个文件夹中并对它们进行逻辑分组,并仍然使用上述方法来访问模块(比如common::validate_results
像这样使用).
我正在执行一个diff
命令perl
.
my @lines = `/usr/local/bin/diff -udr \"$expected_file\" \"$gen_file\"`;
if ($? != 0)
{
print ERRFILE "Diff between $expected_file and $gen_file failed\n";
return $diff_err;
}
Run Code Online (Sandbox Code Playgroud)
diff
由于某种原因,这里可能失败了.例如:stderr显示/ usr/local/bin/diff:test.txt:没有这样的文件或目录.我想在程序中阅读此消息.如何找到diff
命令的stderr消息(或者grep
我执行的任何命令)?
提前感谢您的帮助.
谢谢,Mathew Liju
class A {
A() { }
};
class B : public A {
B() : A() { }
};
Run Code Online (Sandbox Code Playgroud)
为什么我们需要在构造函数中显式调用基类的构造B
函数?不隐含吗?
我们正在编写一个实用程序来将数据加载到Informix DB中.
我们的实用程序是用Python编写的,我们使用pyodbc包来连接和执行SQL.
select和insert查询工作正常.
但是,sql
"从input_file分隔符加载'|' 插入表"
失败,出现以下错误.
pyodbc.ProgrammingError: ('42000', '[42000] [Informix][Informix ODBC Driver][Informix]A syntax error has occurred. (-201) (SQLExecDirectW)')
Run Code Online (Sandbox Code Playgroud)
pyodbc是否不支持Informix中的"load"命令?
提前感谢您的帮助.
谢谢,
我试图创建一个伪超级结构来打印结构数组.我的基本结构如下.
/* Type 10 Count */
typedef struct _T10CNT
{
int _cnt[20];
} T10CNT;
...
/* Type 20 Count */
typedef struct _T20CNT
{
long _cnt[20];
} T20CNT;
...
Run Code Online (Sandbox Code Playgroud)
我创建了下面的结构来打印上面提到的结构数组.编译下面的代码片段时,我解除了引用void指针错误.
typedef struct _CMNCNT
{
long _cnt[3];
} CMNCNT;
static int printCommonStatistics(void *cmncntin, int cmncnt_nelem, int cmncnt_elmsize)
{
int ii;
for(ii=0; ii<cmncnt_nelem; ii++)
{
CMNCNT *cmncnt = (CMNCNT *)&cmncntin[ii*cmncnt_elmsize];
fprintf(stout,"STATISTICS_INP: %d\n",cmncnt->_cnt[0]);
fprintf(stout,"STATISTICS_OUT: %d\n",cmncnt->_cnt[1]);
fprintf(stout,"STATISTICS_ERR: %d\n",cmncnt->_cnt[2]);
}
return SUCCESS;
}
T10CNT struct_array[10];
...
printCommonStatistics(struct_array, NELEM(struct_array), sizeof(struct_array[0]);
...
Run Code Online (Sandbox Code Playgroud)
我的目的是有一个共同的功能来打印所有数组.请让我知道使用它的正确方法.
提前感谢您的帮助.
编辑:参数名称从cmncnt更改为cmncntin.对不起,这是错误的错误.
谢谢,Mathew Liju
当我尝试FTP俄语命名文件时,它在Linux机器中显示为"垃圾"字符.但是当我复制俄罗斯名字时,它正确显示出来.
在FTP期间是否需要在Filezilla中进行任何设置或任何操作.我试过Ascii和Binary模式.
Linux机器的语言环境设置为ru_RU.cp1251.
我们已经遵循正则表达式来验证RFC 2822标准.
功能如下:
int isValidEmail(const char *email_id)
{
/* Regular expression to validate email */
const char *reg_exp =
"[a-z0-9!#$%&'*+-/=?^_`{|}~]+(\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@([a-z0-9]([a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9]([a-z0-9-]*[a-z0-9])?$";
regex_t preg;
/* Compile the regular expression */
if (regcomp(&preg, reg_exp, REG_EXTENDED|REG_NOSUB|REG_ICASE) != 0)
return FAILURE;
/* Execute the regex, 0 for success */
if (regexec(&preg, email_id, (size_t)0, NULL, 0) != 0)
return FAILURE;
regfree(&preg);
return SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
但如果我提供"test @ test @ test.com"等电子邮件,电子邮件将被接受.
这个正则表达式有什么问题吗?
提前感谢您的帮助.
谢谢,Mathew Liju
在计算运行的校验和时需要澄清。
假设我有这样的数据。
data = 'helloworld'
Run Code Online (Sandbox Code Playgroud)
假设块大小为5,我需要计算运行校验和。
>>> zlib.adler32('hello')
103547413
>>> zlib.adler32('ellow')
105316900
Run Code Online (Sandbox Code Playgroud)
根据Python文档(Python版本2.7.2)
zlib.adler32(data[, value])
Run Code Online (Sandbox Code Playgroud)
“计算数据的Adler-32校验和。(Adler-32校验和几乎与CRC32一样可靠,但是可以更快地计算出来。)如果存在value,则将其用作校验和的起始值;否则,使用固定的默认值。这允许在多个输入的串联上计算运行中的校验和。”
但是当我提供这样的东西时,
>>> zlib.adler32('ellow', zlib.adler32('hello'))
383190072
Run Code Online (Sandbox Code Playgroud)
输出完全不同。
我尝试创建一个自定义函数以生成rsync算法中定义的滚动校验和。
def weakchecksum(data):
a = 1
b = 0
for char in data:
a += (ord(char)) % MOD_VALUE
b += a % MOD_VALUE
return (b << 16) | a
def rolling(checksum, removed, added, block_size):
a = checksum
b = (a >> 16) & 0xffff
a &= 0xffff
a = (a - ord(removed) + ord(added)) % MOD_VALUE
b = …
Run Code Online (Sandbox Code Playgroud)